JS基础DOM一

事件

1.常见事件

  • onclick:点击某个对象时调用
  • ondblclick:双击某个对象
  • onmouseover:鼠标移动到元素上
  • onmouseout:鼠标从某元素离开
  • onfocus:元素获取焦点触发
  • onblur:元素失去焦点触发
  • oninput:文本输入文字事件
  • onchange:文本的内容被改变
  • onload:当页面加载完毕的时候触发(文本和图片)
  • onkeydown:键盘按钮被按下
  • onkeyup:键盘按钮被松开

2.事件绑定

  • 行内绑定
    <div id="box" onclick="fn()">
  • 带名函数
         //带名函数
        var div = document.getElementById("box");
        div.onclick = fn;
        function fn() {
          alert(123);
        }
  • 匿名函数
        //匿名函数
        var div = document.getElementById("box");
        div.onclick = function () {
         alert(123);
          div.style.width = "200px";
        };
        //页面加载完毕的时候出发这个事件(文本和图片)
        //整个页面上所有的元素加载完成才会出发这个事件
        //window.onload可以预防使用标签再定义标签之前
        window.onload = function () {
          alert(1);
        }

3.节点访问

节点的访问关系是以属性形式存在的

    <div class="box1">
        <div class="box3"></div>
        <div class="box2">
            <div class="box5"></div>
        </div>
        <div class="box4"></div>
    </div>
  • 节点访问
    //获取父节点
    var box2 = document.getElementsByClassName("box2")[0];
    console.log(box2.parentNode);//打印的是box1

    //兄弟节点

    //下一个兄弟节点
    console.log(box2.nextElementSibling || box2.nextSibling);//兼容写法,nextSibling只支持ie678
    //前一个兄弟节点
    console.log(box2.previousElementSibling || box2.previousSibling);


    //子节点
    console.log(box2.firstElementChild || box2.firstChild);//第一个子节点
    console.log(box2.lastElementChild || box2.lastChild);//最后一个子节点

    //所有子节点
    console.log(box2.parentNode.children);//正常返回
    console.log(box2.parentNode.childNodes);//把空格和换行也算成节点,所以里面有7个元素
  • 节点操作
    //创建节点
    var div1 = document.createElement("div1");
    var div2 = document.createElement("div2");

    //插入节点
    box2.parentNode.appendChild(div1);//在最后插入节点
    box2.parentNode.insertBefore(div2,div1);//两个参数前一个是要插入的节点,第二个是要在哪个节点前插入

    //删除节点
    div1.parentNode.removeChild(div1);//删除节点,也算是把自己删除了


    //克隆节点
    var div3 = div2.cloneNode(false);
   box2.parentNode.insertBefore(div3,div2);//参数是bool,true把所有子节点也复制了,false只是复制一个节点

4.节点属性

    <img src="" alt="" class="box" id="aaa" title="哈哈哈" width="200px" height="200px"/>
<button value="sss" >sssssss</button>
  //获取属性
  var img = document.getElementById("aaa");
  console.log(img.getAttribute("class")) ;
  console.log(img.title);
  console.log(img["width"]);

  //设置属性
  img.setAttribute("title","ttttt");//可以设置没有的属性
  img.title = "哦哦哦";
  img["alt"] = "300";


//  重点:这三种方法不能交替使用,赋值和取值必须用同一种犯法

  //删除属性
  img.removeAttribute("width");

  // innerHTML:获取双闭合标签里面的内容(识别标签)
  console.log(document.getElementsByTagName("button")[0].innerHTML);
  document.getElementsByTagName("button")[0].innerHTML = "<h1>我变大了吗</h1>";

  // innerText:获取双闭合标签里面的内容(不识别标签)
  console.log(document.getElementsByTagName("button")[0].innerText);
  document.getElementsByTagName("button")[0].innerText = "<h1>我变大了吗</h1>"

5.节点类型

<div id="box">您好</div>
    var  div = document.getElementById("box");//获取元素节点
    var att = div.getAttributeNode("id");//获取属性节点
    var  text = div.firstChild;//文本节点

    console.log(div);//div整体标签
    console.log(att);//id = "box"
    console.log(text);
    //nodeType节点类型
    console.log(div.nodeType);//1元素节点
    console.log(att.nodeType);//2属性节点
    console.log(text.nodeType);//3文本节点

     //nodeName节点名字
    console.log(div.nodeName);//div
    console.log(att.nodeName);//box
    console.log(text.nodeName);//#text

    //nodeValue属性值
    console.log(div.nodeValue);//null,元素是没有属性值的
    console.log(att.nodeValue);//box
    console.log(text.nodeValue);//您好

6.表单属性

  • 禁用文本框
<body>
账号: <input type="text" id="acount"/><button>禁用</button><br/><br/>
密码: <input type="password"/>
</body>


<script>
   var input = document.getElementById("acount");
   var btn = document.getElementsByTagName("button")[0];

    btn.onclick = function () {
      btn.innerHTML === "禁用" ? input.disabled = "no" : input.removeAttribute("disabled");//随便写字符串都行,只要不是空
      btn.innerHTML = btn.innerHTML === "禁用" ? "解禁" : "禁用";
    }
</script>
  • 文本获取焦点
<body>
<div class="focus">
    京东:<input type="text"value="我是京东" id="input1"/><br/><br/>
    淘宝:<label for="input2">我是淘宝</label><input type="text" id="input2"/>
</div>
</body>


<script>
    var input_jd = document.getElementById("input1");
    var input_tb = document.getElementById("input2");

    //焦点触发事件
    var jd_ph;
    input_jd.onfocus = function () {
      if (this.value = "我是京东"){
        jd_ph = this.value;
      }
      this.value = "";
    }
    //失去焦点触发事件
    input_jd.onblur = function () {
      this.value = jd_ph;
    }


    //文字的输入事件
    input_tb.oninput = function () {
      var label = input_tb.parentNode.children[3];
      label.style.display = this.value === "" ? "block" : "none";
    }

    //直接获取焦点
    input_tb.focus();//一加载完成就会获取焦点
</script>
  • 登录注册高亮显示
<style type="text/css">
        .error {
            border: 1px solid red;
        }
        .right {
            border: 1px solid green;
        }
</style>
<body>
<div>
    账号:<input type="text" onblur="jude(this)"/><br/><br/>
    密码:<input type="password" onblur="jude(this)"/>
</div>
</body>


<script>
    function jude(inp) {
      //this代指的不是input,而是window,所以要把input传递进来
      console.log(this);
      if (inp.value.length < 6 || inp.value.length > 12){
            inp.className = "error";
      }else {
            inp.className = "right";
      }
    }
</script>
  • select属性
<body>
<div>
    <button id="sel">识别水产</button>
    <br/><br/>
    <select name="" id="">
        <option value="0">香蕉</option>
        <option value="1">苹果</option>
        <option value="2">鸭梨</option>
        <option value="3">鲤鱼</option>
    </select>
</div>
</body>


<script>
    var sel_btn = document.getElementById("sel");
    var opt = document.getElementsByTagName("option")[3];
    sel_btn.onclick = function () {
      //选择鲤鱼
      opt.selected = "true";
    }
</script>
  • 单选框全选
<body>
    <table>
        <thead>
            <tr>
                <th>
                    <input type="checkbox"/>
                </th>
                <th>菜名</th>
                <th>饭店</th>
            </tr>
        </thead>
        <tbody>
        <tr>
            <td><input type="checkbox"/>
            </td>
            <td>地三鲜</td>
            <td>田老师</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>西红柿炒鸡蛋</td>
            <td>田老师</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>醋溜土豆丝</td>
            <td>田老师</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>萝卜干炒黄豆儿</td>
            <td>田老师</td>
        </tr>
        </tbody>
    </table>
</body>
<script>
    //获取input标签
    var titleInput = document.getElementsByTagName("th")[0].children[0];
    var inputArray = document.getElementsByTagName("tbody")[0].getElementsByTagName("input");

    titleInput.onclick = function () {
        for (var i = 0;i < inputArray.length;i++){
          inputArray[i].checked = this.checked;
        }
    }


    for (var i = 0;i < inputArray.length;i++){
      inputArray[i].onclick = selFn;
    }

    function selFn() {
//        var bool = inputArray.every(function (item,index,array) {
//           return item.checked;
//        });//伪数组没有数组的一些遍历方法
      var bool = true;
      for (var i = 0;i < inputArray.length;i++){
        if (!inputArray[i].checked){
          bool = false;
          break;
        }
      }
        titleInput.checked = bool;
    }
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,312评论 0 8
  • 第1章 鼠标事件 1-1 jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是...
    mo默22阅读 1,255评论 0 6
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,592评论 2 10
  • 事件流 IE和Netscape开发团队提出了完全相反的两种事件流的概念,事件冒泡流和事件捕获流。 事件冒泡 事件由...
    exialym阅读 920评论 0 9
  • 1 Claude Monet, I papaveri 莫奈:《亚嘉杜的罂粟花田》 Uno degli oli su...
    全欧小语种阅读 527评论 0 0