web标准与document.body.clientHeight

本文介绍了在不同文档类型定义(DTD)下如何正确获取网页的高度。在Quirks模式下可以直接使用document.body.clientHeight,而在标准模式下则需要使用document.documentElement.clientHeight。此外还提到了通过调整DTD声明来解决该问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网页加了这么一行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
document.body.clientHeight就不可用,解决方法如下:

在Quirks渲染模式下<body>作为文档的根,所以可以用document.body.clientHeight得到文档的高度。而在Standard渲染模式下,<html>作为文档的根,需要使用document.documentElement.clientHeight才可以得到。此时document.body的高度和宽度都为0 

或者将
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
改为
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">

 
function calendar()//主调函数 { var e = window.event.srcElement; writeIframe (); var o = WebCalendar.calendar.style; WebCalendar.eventSrc = e; if (arquments.length == 0) WebCalendar.objExport = e; else WebCalendar.objExport =eval(arquments[0]); WebCalendar.iframe.tableWeek.style.cursor = WebCalendar.draq ? "move" : "default"; var t = e.offsetTop, h = e.clientHeight, l = e.offsetLeft, p = e.type; while (e = e.offsetParent){t += e.offsetTop; l += e.offsetLeft;} o.display = ""; WebCalendar.iframe.document.body. focus () ; var cw = WebCalendar.calendar.clientWidth, ch = WebCalendar.calendar.clientHeight; var dw = document.body.clientWidth, dl = document.body.scrollLeft, dt = document.body.scrollTop; if (document.body.clientHeight + dt - t - h >= ch) o.top = (p=="image")? t + h : t + h + 6; else o.top = (t - dt < ch) ? ((p=="image")? t + h :t + h + 6) :t - ch; if (dw + dl - l >= cw) o.left = l; else o.left = (dw >= cw) ? dw - cw + dl : dl; if (!WebCalendar.timeShow) WebCalendar.dateReg = /^(\d{1, 4}) (-1\/) (\d{1, 2}) \2(\d{1, 2})$/; else WebCalendar.dateReg = /^(\d{1, 4}) (-1\/) (\d}1, 2})\2(\d{1, 2}) (\d{1, 2}): (\d{1, 2}): (\d{1, 2})$/; try { if (WebCalendar.objExport.value.trim() != ""){ WebCalendar.dateStyle = WebCalendar.objExport.value.trim() .match (WebCalendar.dateReg) ; if (WebCalendar.dateStyle == null) {WebCalendar.thisYear = new Date().getFullYear () ; WebCalendar.thisMonth = new Date().getMonth()+ 1; WebCalendar.thisDay = new Date().getDate(); alert("无效的日期格式!”); writeCalendar(); return false;} else{ WebCalendar. thisYear = parseInt (WebCalendar.dateStyle[1], 10); WebCalendar.thisMonth = parseInt (WebCalendar .dateStyle[3], 10); WebCalendar.thisDay = parseInt (WebCalendar.dateStyle[4], 10); WebCalendar. inputDate=parseInt (WebCalendar.thisMonth, 10) +"/"+ parseInt (WebCalendar.thisDay, 10) +”/"+ parseInt(WebCalendar.thisYear, 10) ; writeCalendar() ; }}else writeCalendar () ; } catch(e) (writeCalendar () ;} } 给上述代码添加注释的注释,并解释相关方法
03-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值