一个DOM操作的题目

<!--
    题目:已知页面中有一个ul,下面已经有3个li标签,问:
    1. 如何再添加100个li元素? 然后删掉次序为偶数的li?
    2. 如何给每个li添加一个onclick事件?
    3. 获取最后一个li并向其中添加<a>标签?

    要点:
    1. 先将li逐个添加至documentFragment中,再将documentFragment添加到ul中。
    2. 事件委托,注意浏览器兼容性。
    3. 获取最后一个元素用document.getElementsByTagName("ul")[0].lastElementChild,不要用lastChild,
    也可以先获取li的HTMLCollection集合,再取其下标为length-1的元素。
-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM操作</title>
    <script>

        function test() {
            //批量添加100个<li>
            var oUl=document.getElementsByTagName("ul")[0];
            var tempNode=document.createDocumentFragment();
            var newLi;
            var newTxt;
            var eleCnt=oUl.childElementCount; // oUl.length动态更新,oUl.childElementCount并不会
            for(var i=1;i<101;i++){
                newTxt=i+eleCnt;
                newLi=document.createElement("li");
                newLi.innerHTML=newTxt;
                tempNode.appendChild(newLi);
            }
            oUl.appendChild(tempNode);

            // 批量删除次序为奇数的li
            //删除dom节点之前,一定要删除注册在该节点上的事件,不管是用observe方式还是用attachEvent方式注册的事件,
            // 否则将会产生无法回收的内存.
            // 批量删除前,先将元素隐藏,再进行删除操作,最后再显示元素。
            // 因对display:none的元素进行操作不会引起回流、重绘,所以整个操作只会有2次回流(display属性切换的时候)。
            oUl.style.display="none";

            var allLi=oUl.querySelectorAll('ul :nth-child(odd)'); // querySelectorAll方法返回值(NodeList类型)不会动态变化
            console.log(allLi);
            var len=allLi.length;
            while(len--){
                oUl.removeChild(allLi[len]);
            }

            oUl.style.display="block";


            //给所有的li添加onclick事件——定义时间处理函数
            function handleFn(e) {
                var ev=e||window.event;
                var targetNode=ev.target;
                if(targetNode.nodeName==="LI"){
                    console.log(targetNode.innerHTML);
                }
            }
            //给所有的li添加onclick事件——给父元素ul添加事件监听
            if(oUl.addEventListener){
                oUl.addEventListener("click",handleFn,false);
            }else{
                oUl.attachEvent("onclick",handleFn);
            }


            // 获取最后一个li
            var lastLi=oUl.lastElementChild; // 注意不能用lastChild

            // 向最后一个li中添加<a>标签及相关属性
            var oA=document.createElement("a");
            lastLi.appendChild(oA);
            oA.href="http://www.baidu.com/";
            oA.target="_blank";
            oA.innerHTML="我是超链接";

        }


    </script>
</head>
<body οnlοad="test()">
    <ul id="ul">
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值