javaseday37补充(list展开闭合 节点单独操作 注意获取节点时的s 增删行)

本文介绍了一种通过JavaScript实现网页元素动态操作的方法,包括列表的展开与收起、表格的创建与修改等实用技巧,有助于提升网站交互体验。
<style type="text/css">
dl dd{
    margin:0px;
}
dl{
    height:16px;
    overflow:hidden;
}
/*预定义一些样式 类选择器 便于给标签进行样式的动态加载*/
.open{
    overflow:visible;
    height:auto;
}
.close{
    overflow:hidden;
}
dl dt{
    color:#06F;
}
</style>
<script type="application/javascript">
</script>
</head>

<body>
<!--
1、标签封装数据 html
2、定义样式 css
3、明确事件源和事件 以及要处理的节点 dom
4、明确具体操作方式 其实就是事件的处理内容 js
 -->
<script type="application/javascript">
    //列表展开闭合效果
    var flag= true;
    function list1()
    {
        /*
            1、无非就是将dl属性的overflow的值改成visible即可
            2、要先获取dl节点
            3、改变该节点的style.overflow属性
        */
        //1、获取dl节点
        var oDlNode = document.getElementsByTagName("dl")[0];
        //oDlNode.style.overflow="visible";
        if(flag)
        {
            oDlNode.style.overflow="visible";   
            flag= false;
        }
        else{
            oDlNode.style.overflow="hidden";    
            flag= true; 
        }
    }
    //重新定义list 降低js和css的耦合性
    function list2(node)
    {
        //1、获取div节点
        //var oDlNode = document.getElementsByTagName("dl")[node];
        //2、设置dl的className属性值
        //oDlNode.className="open";
        var oDlNode = node.parentNode;
        if(oDlNode.className=="close")
        {
            oDlNode.className="open";   
        }
        else 
        {
            oDlNode.className="close";
        }
    }
    /*
        在多个列表下 一次只需要展开一个列表 其他列表都关闭
        怎么保证开一个 而关其他
        1、获取所有的dl节点
        2、遍历这些节点 只对当前的dl进行展开 或者闭合操作 其他节点都进行闭合操作
    */
    function list(node)
    {
        //获取当前的dl节点
        var oDlNode = node.parentNode;
        //获取所有的dl节点
        var oDlNodes =  document.getElementsByTagName("dl");
        //遍历所有dl
        for (var x= 0;x<oDlNodes.length;x++)
        {
            if(oDlNodes[x]==oDlNode)
            {
                if(oDlNode.className=="close")
                {
                    oDlNode.className="open";   
                }
                else 
                {
                    oDlNode.className="close";
                }
            }
            else
            {
                oDlNodes[x].className="close";  
            }   
        }

    }
</script>

<dl class="close">
<dt onclick="list(this)">显示条目一</dt>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
</dl>
<dl class="close">
<dt onclick="list(this)">显示条目二</dt>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
</dl>

<dl class="close">
<dt onclick="list(this)">显示条目三</dt>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
<dd>展开里面的内容</dd>
</dl>

</body>

增删行

<script type="text/javascript">
    function creTable1()
    {
        /*
            可以通过之前的createElement 创建元素的形式来完成 巨原始 
        */  
        //1、创建表格节点
        var oTabNode = document.createElement("table");

        //2、创建tBody节点
        var oTbdNode = document.createElement("tbody");
        //3、创建行节点tr

        var oTrNode = document.createElement("tr");
        //4、创建单元格节点td
        var oTdNode = document.createElement("td");
        oTdNode.innerHTML="这是个单元格";
        //alert(oTdNode.innerHTML);

        //让这些节点有关系 进行指定层次的节点添加
        oTrNode.appendChild(oTdNode);
        oTbdNode.appendChild(oTrNode);
        oTabNode.appendChild(oTbdNode);
        document.getElementsByTagName("div")[0].appendChild(oTabNode);

    }
    /*
        上面的方法很麻烦 操作什么就在什么找方法
        既然操作的是表格 那最方便的方式就是使用表格节点对象的方法来完成
        表格是由行组成 表格节点对象中 insertRow方法就完成创建行并添加的动作
        行是由单元格组成 通过tr节点对象的insertCell来完成
    */
    function creTable()
    {
        var oTabNode = document.createElement("table"); 
        oTabNode.setAttribute("id","tabid");
        var rowValue = parseInt(document.getElementsByName("rownum")[0].value);
        var colValue = parseInt(document.getElementsByName("colnum")[0].value);
        for(var x= 1;x<=rowValue;x++){
            var oTrNode = oTabNode.insertRow();
            //document.write(oTrNode.nodeName);
            for(var y= 1;y<=colValue;y++)
            {
                var oTdNode = oTrNode.insertCell();
                oTdNode.innerHTML= x+"单元格"+y;
                //document.write(oTdNode.innerHTML);
            }

        }
        //将表格节点添加到div中
        document.getElementsByTagName("div")[0].appendChild(oTabNode);
        document.getElementsByName("crebut")[0].disabled=true;
    }
    //删除行
    function delRow()
    {
        //获取表格对象
        var oTabNode = document.getElementById("tabid");
        if(!oTabNode)
        {
            alert("表格不存在");
            return; 
        }   

        //获取要删除的表格行数
        var rowVal  = document.getElementsByName("delrow")[0].value;
        if(rowVal>=1 && rowVal<=oTabNode.rows.length)//还有一个长度
        {
        oTabNode.deleteRow(rowVal-1);
        }
        else{
            alert("要删除的行不存在");  
        }
    }
    //删除列 其实就是在删除每一行中同一位置的单元格
    function delCol()
    {
        var oTabNode = document.getElementById("tabid");
        if(!oTabNode)
        {
            alert("表格不存在");
            return; 
        }   
        var colVal  = document.getElementsByName("delcol")[0].value;
        if(colVal>=1 && colVal<=oTabNode.rows[0].cells.length)
        {
            for(var x= 0; x<oTabNode.rows.length;x++)
            {
                oTabNode.rows[x].deleteCell(colVal-1);  
            }
        }
        else
        {
            alert("删除的列不存在");
        }
    }
</script>
</head>

<body>
<!--
在页面中创建一个 5行6列的表格
1、事件源 比如按钮
2、必须有一个生成的表格节点存储位置
 --><input type="text" name="rownum" /><input type="text" name="colnum" />
 <input type="button" value="创建表格" name="crebut" onclick="creTable()" /> 
 <hr />
 <input type="text" name="delrow"  /> <input type="button" value="删除行" onclick="delRow()" />
 <input type="text" name="delcol"  /> <input type="button" value="删除列" onclick="delCol()" />

 <div>
 </div>
</body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值