javascript Element类型

  1. Element节点是Element类型的实例;
  2. Element节点的nodeName与tagName属性元素的标签名的大写;nodeValue为null;
    <!DOCTYPE html>
    <html>
        <body>
            <div id="123">123</div>
        </body>
        <script>
            var _div = document.getElementById("123");
            console.log(_div.nodeName);
            console.log(_div.tagName);
            console.log(_div.nodeValue);
        </script>
    </html>

     

  3. 最佳实践:在比较标签名与字符串时,最好先将标签名转为为全小写。

HTML元素

  • 所有HTML元素都由HTMLElement类型表示,HTMLElement类型继承自Element类型并添加了一些属性和方法;

所有HTML元素都是由HTMLElement或者其子类型表示的,每个HTML元素都由与之关联的类型,如:HTMLAnchorElement, HTMLBodyElement, HTMLDivElement..., 这些类型都继承HTMLElement类型的属性和方法,也有着自己的扩展

  •  大部分HTML标签的原生特性作为Element节点对象的属性都可以直接通过"."或"[]"操作符读写,但无法读写自定义的特性(见下面的取得特性一节)
    <!DOCTYPE html>
    <html>
        <body>
            <div id="123">123</div>
        </body>
        <script>
            var _div = document.getElementById("123");
            console.log(_div.id);
            console.log(_div.className);
            console.log(_div.name);
            console.log(_div["id"]);
            console.log(_div["className"]);
            console.log(_div["name"]);
        </script>
    </html>

     

  • class为ES的保留字,使用“.” 或"[]"访问元素类名需要使用className。

取得特性

getAttribute(), setAttribute(), removeAttribute()三个特性操作的方法:

  1. 传递给getAttribute()的特性名字符串与实际的特性名相同,比如:要获取class的特性值,应该传入'class',而不是'className';
  2. 通过getAttribute()方法可以取得自定义特性;
  3. 最佳实践:根据HTML5的规范推荐,自定义特性应该加上data-前缀以便验证;
  4. getAttribute()方法与节点的访问方法".style"返回值的类型不同,前者返回一个字符串,后者返回CSSStypleDeclaration对象;
    <!DOCTYPE html>
    <html>
        <body>
            <div id="123" style="height: 20px;">123</div>
        </body>
        <script>
            var _div = document.getElementById("123");
            console.log(_div.getAttribute("style"));  // 输出:height: 20px;
            console.log(_div.style);  // 输出:CSSStyleDeclaration {0: "height", alignContent: "", …}
        </script>
    </html>

    同理,访问节点的"onclick"也分别返回function和字符串 

  5. 最佳实践:只在获取标签的自定义特性值的情况下才使用getAttribute()方法,其余情况直接访问属性。

设置特性

  1. setAttribute()接收两个字符串参数:name 和value;
  2. setAttribute()方法可以操作自定义特性;
  3. setAttribute()设置的特性名会自动转换为小写;
  4. 最佳实践:只有在设置自定义标签的时候才使用setAttribute()方法,其余情况直接操作属性;
  5. removeAttribute()用于彻底删除元素的特性和值,包括自定义特性;

attributes属性

  1. attributes属性是Element类型独有的;
  2. attributes属性是一个NamedNodeMap对象,类似NodeList,是由特性节点组成对象;
  3. NamedNodeMap对象中的每一项又是一个单独的特性节点,有nodeName,nodeValue等属性;
  4. NamedNodeMap对象拥有的方法
    <!DOCTYPE html>
    <html>
        <body>
            <div id="123" style="height: 20px;">123</div>
        </body>
        <script>
            var _div = document.getElementById("123");
    
            // item()
            console.log(_div.attributes.item(1));  // 输出:style="height: 20px;"
    
            // getNamedItem()
            console.log(_div.attributes.getNamedItem("id"));  // 输出:id="123"
            console.log(_div.attributes.getNamedItem("id").nodeValue);  // 输出:123
    
            // removeNamedItem()
            console.log(_div.attributes.removeNamedItem("style"));  // 输出:style="height: 20px;"
    
            // setNamedItem()
            var newAttr = document.createAttribute("newAttr");
            newAttr.nodeValue = "456";
            _div.attributes.setNamedItem(newAttr);
        </script>
    </html>

     

  5. 使用attributes对象来操作元素节点的特性与直接使用getAttribute(), setAttribute(), removeAttribute()效果一致,attributes的方法可以找到别的简单的替代者;

  6. 针对attributes对象中的特性,不同浏览器返回的顺序不同;IE7会将没有指定的特性一并返回,需要使用NamedNodeMap中节点的specified属性检测是否为已定义特性

    console.log(_div.attributes[1].specified);  // 输出:true或false

     

  7. 最佳实践:只使用attributes属性对象来遍历元素的特性:

    <!DOCTYPE html>
    <html>
        <body>
            <div id="123" style="height: 20px;">123</div>
        </body>
        <script>
            function outputAttributes(element){
                var attrs = new Array(),
                    attrName,
                    attrValue,
                    i,
                    len;
    
                for(i = 0, len=element.attributes.length; i<len; i++){
                    attrName = element.attributes[i].nodeName;
                    attrValue = element.attributes[i].nodeValue;
                    if(element.attributes[i].specified){
                        attrs.push(attrName + '=\"' + attrValue + '\"');
                    }
                }
    
                return attrs.join(" ");
            }
            var _div = document.getElementById("123");
            console.log(outputAttributes(_div));
        </script>
    </html>

     

创建元素

  1. document.createElement()传入参数为标签名(小写):
    <!DOCTYPE html>
    <html>
        <body>
            <div id="123" style="height: 20px;">123</div>
        </body>
        <script>
            var _div = document.createElement("div");
            _div.className = 'div';
            _div.innerHTML = 'Hi!';
            document.body.appendChild(_div);
        </script>
    </html>

     

  2. 可以创建自定义的非标准标签,例如:

    document.createElement("abc");

     

  3. 在IE8及以下可以传入整个元素标签,包括属性、content等,其他浏览器不支持;兼容性写法:

    <!DOCTYPE html>
    <html>
        <body>
            <div id="123" style="height: 20px;">123</div>
        </body>
        <script>
            if(document.documentMode && document.documentMode <= 8){
                var div = document.createElement('<div class=\"demo\">Content</div>');
            }else{
                var div = document.createElement('div');
                div.calssName = 'div';
                div.innerHTML = 'Content';
            }
        </script>
    </html>

     

元素的子节点

  1.  不同的浏览器对待元素间的空白符的解析不同。低版本IE会忽略元素之间的无用的空白符,其他浏览器会将空白符视作一个文本节点;

  2.  

    需要对元素的childNodes进行操作时,通常先检测一下nodeType属性:

     
    <!DOCTYPE html>
    <html>
        <body>
            <div id="123" style="height: 20px;">123</div>
        </body>
        <script>
            var element = document.getElementById("123");
            for(var i=0; i<element.childNodes.length; i++){
                if(element.childNodes[i].nodeType == 1){
                    // do something
                }
            }
        </script>
    </html>

     

元素尺寸与位置

关于滚动条:

页面的滚动条是属于html元素的,而不是body元素的

滚动条的宽度是包含在元素的宽度里面的

document.documentElement.clientTop和document.documentElement.clientLeft访问的是盒子上边框和左边框的值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mannuandeyangguang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值