JavaScript-02-优先级/提取行间事件

操作属性的两种方式:
var element=document.getElementById(“div1”);
① element.style.width=”100px”;

② element[“style”][“width”]=”100px”;
[ ] 中括号内可以直接用字符串,也可以用变量代替
方式①:代码简单易书写;
方式②:当需要修改的属性值不固定时可以用变量代替。

样式优先级:
通配符 * < 标签 < class < ID < 行间 ;
注:如果css中用.class 设置了属性,然后用JavaScript改变了元素的class,样式随之改变

    <style type="text/css">
    .class1{
      width:50px; 
      height:50px;
      background:red;
    }
    .class2{
      width:100px;
      height:100px;
      border:2px solid black;
    }
  </style>
  <script type="text/javascript">
  <!--
    function f(){
      var ele=document.getElementById("d1");
  //  同优先级覆盖,样式变为 .class2{ } 中的样式
      ele.className="class2";
      alert(ele.className); //class2
    }
  //-->
  </script>

style与className:
JavaScript操作元素的style都是修改行间样式;[如下图]

  <script type="text/javascript">
  <!--
    function f(){
      var ele=document.getElementById("d1");
      ele.style.width="100px";
      ele.style.height="100px";
      ele.style.background="blue";

    }
  //-->
  </script>

元素原始行间样式
JavaScript设置了style后行间样式
因此如果对同一个元素,修改了style样式(即行间样式),再修改className将无效化,所以要注意:
① 修改元素尽量用同一个属性(优先级相同),如前后修改都修改class,这样避免后来的修改无效;
② 且因优先级造成的样式无效没有任何错误提示,后期难以排查。

提取行间事件:
在多人共同开发环境下,行间事件容易被误删,或以邮箱邮件为例,行间事件数量繁多,操作繁复,因此需要提取。
提取行间事件方法:【以onclick事件为例】可用匿名函数

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <title>Document</title>
  <style type="text/css">
    .class1{
      width:50px;
      height:50px;
      background:red;
    }
    .class2{
      width:50px;
      height:50px;
      background:blue;
    }
  </style>
 </head>

 <body>
 <div id="d1" class="class1">   
 </div>
 <p></p>
  <input id="b1" type="button" value="变蓝色"  />
    <script type="text/javascript">
    <!--
        function functionName(){          
          var b=document.getElementById("d1");
          d1.className="class2";
        }
        var a=document.getElementById("b1");
// 事件后面写函数名,不能含() 否则直接调用了,不管有木有触发点击事件
        a.onclick=functionName;

        /* 可以用匿名函数
        a.onclick(){
           ……
         }    */
    //-->
  </script>

 </body>
</html>

注意:由于开始JavaScript代码写在head中,报下图错误 ↓
无法设置元素属性提示
遇到此提示判断代码没有书写格式错误的情况下一般是由script加载但是操作的元素未加载造成的。
JavaScript代码是顺序执行的,当执行到操作div属性的时候,还没有加载到此div对象,所以设置也就不能够成功,可以将JavaScript代码写在网页底端或者window.onload。
网页中的javaScript脚本代码往往需要在文档加载完成后才能够去执行,否则可能导致无法获取对象的情况。

getElementsByTagNames(“标签名”)
例如邮箱的全选和邮件前的复选框,都是input标签,可以用div分开,然后:
var button1=document.getElementById(“ID_button1”);
var checkboxes=button1.getElementsByTagName(“input”);

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
  <script type="text/javascript">
  <!--
     window.onload=function(){
     // 获取button
       var oBtn1=document.getElementById("b1");
       var oBtn2=document.getElementById("b2");
       var oBtn3=document.getElementById("b3");

//  全选函数
       function AllChoose(){
         var oDiv2=document.getElementById("div2");
         var boxes=oDiv2.getElementsByTagName("input");
         for(var i=0;i<boxes.length;i++){
               boxes[i].checked=true;          
          }
        }

// 反选函数
        function Others(){
         var oDiv2=document.getElementById("div2");
         var boxes=oDiv2.getElementsByTagName("input");
         for(var i=0;i<boxes.length;i++){
               if(boxes[i].checked){
                 boxes[i].checked=false;
               }else{
                 boxes[i].checked=true;
               }               
          }
        }

//  全部清除 函数
        function Clear(){
         var oDiv2=document.getElementById("div2");
         var boxes=oDiv2.getElementsByTagName("input");
         for(var i=0;i<boxes.length;i++){
               boxes[i].checked=false;         
          }
        }
  /*  在函数内设置点击事件不能带() 因此不能传参,方法相似不能共用同一个方法【待解决】 */
      oBtn1.onclick=AllChoose;
      oBtn2.onclick=Others;
      oBtn3.onclick=Clear;
     } // onload
  //-->
  </script>
 </head>

 <body>
 <div id="div1" class="">
  <input id="b1" type="button" value="全选" />
  <input id="b2" type="button" value="反选" />
  <input id="b3" type="button" value="清空" />
 </div>

  <div id="div2" class="">
    <input type="checkbox" id="" /><br>
    <input type="checkbox" id="" /><br>
    <input type="checkbox" id="" /><br>
    <input type="checkbox" id="" /><br>
    <input type="checkbox" id="" /><br>
    <input type="checkbox" id="" /><br>
    <input type="checkbox" id="" /><br>
    <input type="checkbox" id="" /><br>
  </div>
 </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值