程序员

脚本化文档(2)

2016-07-03  本文已影响66人  kissLife

文档和元素的几何形状和滚动

当浏览器在窗口中渲染文档时,它创建文档的一个视觉表现层,在那里每个元素有自己的位置和尺寸。

文档坐标 & 视口坐标

元素的位置是以像素来度量的,向右代表X坐标的增加,向下代表Y坐标的增加。

// 查询滚动条的偏移量
function getScrollOffset(w) {
    // 使用指定的窗口,如果不带参数则使用当前窗口
    w = w || window;
    
    // 除了IE8及更早的版本之外,其他浏览器都能用
    if(w.pageXOffset != null)   return { x: w.pageXOffset, y:w.pageYOffset };
    
    // 对标准模式下的IE(或任何浏览器)
    var d = w.document;
    if(document.compatMode == "CSS1Compat")
        return { x: d.documentElement.scrollLeft, y: d.documentElement.scrollTop };
    
    // 对怪异模式下的浏览器
    return { x: d.body.scrollLeft, y: d.body.scrollTop };
}

查询元素的尺寸

判定一个元素的尺寸和位置简单的方法是调用它的getBoundingClientRect()方法。返回一个有left、right、top和bottom属性的对象。

获取指定点的元素

可以使用elementFromPoint()来获取指定坐标点的一个元素,坐标点变量为视口坐标。如果指定的坐标点在视口之外,则函数返回null。

窗口滚动

元素的其他尺寸属性

offset相关属性

offsetWidth & offsetHeight
// 通过offset属性获取文档坐标
function getElementPosition(e) {
    var x = 0, y = 0;
    while(e != null) {
        x += e.offsetLeft;
        y += e.offsetTop;
        // 获取所有的父元素
        e =  e.offsetParent;    
    }
    
    return { x: x, y: y };
}

client相关属性

clientWidth & clientHeight

scroll相关属性

scrollWidth & scrollHeight

HTML表单

表单和表单元素的选取

一般来说,用id属性指定文档元素比用name属性更佳,但是name属性在表单中较为常用

表单的选取

document.address        // 仅当表单有name属性时可用
document.forms.address  // 显式访问表单
document.forms[n]       // n表示表单的序号

表单元素的选择

document.address.street
document.forms.address.street
document.forms.address[0]

document.forms.address.elements[0]       // 使用表单的elements属性
document.forms.address.elements.street

注意:当有多个元素共享name时,将返回一个类数组对象

表单和表单元素的属性

在事件处理程序中,关键字this是触发该事件的文档元素的一个引用。

表单的属性

上面已经使用到了elements属性,其他的属性还有action、encoding、method、target等。

表单元素的属性

表单元素的属性包括type、form、name、value等。其中value值就是当提交表单时发送到web服务器的字符串。

表单和表单元素的事件处理程序

表单的事件处理

注意:onsubmit只能通过单击"提交"按钮来触发。直接调用表单的submit()方法并不触发obsubmit事件处理程序。

注意:onreset只能通过单击"重置"按钮来触发。直接调用表单的reset()方法并不触发onreset事件处理程序。

表单元素的事件处理

按钮

以input元素定义的按钮会将value属性值以纯文本显示。以button元素定义的按钮会将元素的一切内容显示出来。
注意:超级链接与按钮一样提供了onclick事件处理程序。当onclick事件所触发的动作可以概念化为"跟随此链接"时就用一个链接;否则,使用按钮。

开关按钮

注意:用户单击其他单选按钮而导致这个单选按钮状态的改变,后者不触发onchange事件。

文本域

选择框

// 在已存在的select元素上添加一个选项

// 创建一个新的选项
var zaire = new Option("Zaire", // text属性
                       "zaire", // value属性
                       false,   // defaultSelected属性
                       false);  // selected属性
// 得到select对象
var countries = document.address.country;
countries.options[countries.options.length] = zaire;
上一篇 下一篇

猜你喜欢

热点阅读