专栏首页Czy‘s BlogJavaScript选择器

JavaScript选择器

Js选择器

JS选择器常用的有getElementById()getElementsByClassName()getElementsByName()getElementsByTagName()querySelector()querySelectorAll()

getElementById

通过id来定位,返回对指定id的第一个对象的引用,返回类型为HTMLDivElement

<div id="t1">T1</div>

<script type="text/javascript">
    var t1 = document.getElementById("t1");
    console.log(t1); // <div id="t1">D1</div>
    console.log(Object.prototype.toString.call(t1)); // [object HTMLDivElement]
</script>

getElementsByClassName

通过class属性来定位,返回文档中指定class属性值的元素的引用,返回类型为HTMLCollection

<div class="t2">D2</div>
<div class="t2">D3</div>

<script type="text/javascript">
    var t2List = document.getElementsByClassName("t2");
    console.log(t2List); // HTMLCollection(2) [div.t2, div.t2]
    // 使用for循环遍历
    for(let i=0,n=t2List.length;i<n;++i) console.log(t2List[i]);
    // HTMLCollection的prototype中没有forEach方法,遍历需要使用Array的prototype中forEach通过call绑定对象实例并传参
    Array.prototype.forEach.call(t2List,v => console.log(v) ); 
    // HTMLCollection的prototype中没有map方法,也需要使用Array的prototype中forEach通过call绑定对象实例并传参
    Array.prototype.map.call(t2List,v => console.log(v) ); 
</script>

getElementsByName

通过name属性来定位,返回文档中指定name属性值的元素的引用,返回类型为NodeList

<div name="t3">D4</div>
<div name="t3">D5</div>

<script type="text/javascript">
    var t3List = document.getElementsByName("t3");
    console.log(t3List); // NodeList(2) [div, div]
    // 可直接使用forEach进行遍历
    t3List.forEach( v => console.log(v) ); 
    // NodeList的prototype中没有map方法,使用map的场景也需要借助Array的prototype中map通过call绑定对象实例并传参
    Array.prototype.map.call(t3List,v => console.log(v) ); 
</script>

getElementsByTagName

通过标签的名字来定位,返回文档中指定标签的元素的引用,返回类型为HTMLCollection

<p class="t4">P6</p>
<p class="t4">P7</p>

<script type="text/javascript">
    var t4List = document.getElementsByTagName("p");
    console.log(t4List); // HTMLCollection(2) [p, p]
    Array.prototype.forEach.call(t4List, function(v){console.log(v);}); 
    Array.prototype.map.call(t4List,function(v){console.log(v);} ); 
</script>

querySelector

通过CSS选择器来定位,返回文档中匹配指定CSS选择器的第一个元素的引用,返回类型为HTMLDivElement

<div>
    <div class="t5">D8</div>
</div>

<script type="text/javascript">
    var t5 = document.querySelector("div .t5");
    console.log(t5); // <div class="t5">D8</div>
    console.log(Object.prototype.toString.call(t5)); // [object HTMLDivElement]
</script>

querySelectorAll

通过CSS选择器来定位,返回文档中匹配指定CSS选择器的所有元素的引用,返回类型为NodeList

<div>
    <div id="t6">D9</div>
    <div>D10</div>
    <div>D11</div>
</div>

<script type="text/javascript">
     var t6List = document.querySelectorAll("#t6 ~ div");
    console.log(t6List); // NodeList(2)[div, div]
    t6List.forEach(function(v){console.log(v);}); 
    Array.prototype.map.call(t6List,function(v){console.log(v);} ); 
</script>

知识相关

数组的遍历 https://github.com/WindrunnerMax/EveryDay/blob/master/JavaScript/Js%E9%81%8D%E5%8E%86%E6%95%B0%E7%BB%84%E6%80%BB%E7%BB%93.md
ES6箭头函数 https://github.com/WindrunnerMax/EveryDay/blob/master/JavaScript/ES6%E6%96%B0%E7%89%B9%E6%80%A7.md
原型与原型链 https://github.com/WindrunnerMax/EveryDay/blob/master/JavaScript/%E5%8E%9F%E5%9E%8B%E4%B8%8E%E5%8E%9F%E5%9E%8B%E9%93%BE.md
CSS选择器 https://github.com/WindrunnerMax/EveryDay/blob/master/CSS/CSS%E9%80%89%E6%8B%A9%E5%99%A8.md

代码示例

<!DOCTYPE html>
<html>
<head>
    <title>Js选择器</title>
    <meta charset="utf-8">
</head>
<body>

    <div id="t1">D1</div>

    <div class="t2">D2</div>
    <div class="t2">D3</div>

    <div name="t3">D4</div>
    <div name="t3">D5</div>

    <p class="t4">P6</p>
    <p class="t4">P7</p>

    <div>
        <div class="t5">D8</div>
    </div>

    <div>
        <div id="t6">D9</div>
        <div>D10</div>
        <div>D11</div>
    </div>

</body>
<script type="text/javascript">
    var t1 = document.getElementById("t1");
    console.log(t1); // <div id="t1">D1</div>
    console.log(Object.prototype.toString.call(t1)); // [object HTMLDivElement]
    console.log("");

    var t2List = document.getElementsByClassName("t2");
    console.log(t2List); // HTMLCollection(2) [div.t2, div.t2]
    // 使用for循环遍历
    for(let i=0,n=t2List.length;i<n;++i) console.log(t2List[i]);
    // HTMLCollection的prototype中没有forEach方法,遍历需要使用Array的prototype中forEach通过call绑定对象实例并传参
    Array.prototype.forEach.call(t2List,v => console.log(v) ); 
    // HTMLCollection的prototype中没有map方法,也需要使用Array的prototype中forEach通过call绑定对象实例并传参
    Array.prototype.map.call(t2List,v => console.log(v) ); 
    console.log("");

    var t3List = document.getElementsByName("t3");
    console.log(t3List); // NodeList(2) [div, div]
    // 可直接使用forEach进行遍历
    t3List.forEach( v => console.log(v) ); 
    // NodeList的prototype中没有map方法,使用map的场景也需要借助Array的prototype中map通过call绑定对象实例并传参
    Array.prototype.map.call(t3List,v => console.log(v) ); 
    console.log("");

    var t4List = document.getElementsByTagName("p");
    console.log(t4List); // HTMLCollection(2) [p, p]
    Array.prototype.forEach.call(t4List, function(v){console.log(v);}); 
    Array.prototype.map.call(t4List,function(v){console.log(v);} ); 
    console.log("");

    var t5 = document.querySelector("div > .t5");
    console.log(t5); // <div class="t5">D8</div>
    console.log(Object.prototype.toString.call(t5)); // [object HTMLDivElement]
    console.log("");

    var t6List = document.querySelectorAll("#t6 ~ div");
    console.log(t6List); // NodeList(2) [div, div]
    t6List.forEach(function(v){console.log(v);}); 
    Array.prototype.map.call(t6List,function(v){console.log(v);} ); 
    console.log("");
</script>
</html>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Vue父子组件生命周期

    Vue实例需要经过创建、初始化数据、编译模板、挂载DOM、渲染、更新、渲染、卸载等一系列过程,这个过程就是Vue的生命周期,Vue中提供的钩子函数有before...

    WindrunnerMax
  • CSS实现垂直居中布局

    首先将<html>与<body>的高度设置为100%(为演示父元素不定宽高的效果),并清除<body>的默认样式

    WindrunnerMax
  • CSS盒子模型

    所有的HTML元素都可以看作是一个盒子 将盒子模型拆分,则包括 外边距+边框+填充+内容 显得专业一些,box model = margin+border+...

    WindrunnerMax
  • 11Element对象

    DOM的标准规范中提供了 Elementi对象,该对象提供了HTML页面中所有元素所具有的属性和方法。 DOM标准规范中提供了Node对象,主要是依靠DOM节...

    Dreamy.TZK
  • http://blog.csdn.net/u010105969/article/details/53541088

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    用户1451823
  • 2018中国十大科技进展公布!两院院士投票,港珠澳大桥和天河三号上榜

    不同于其他民间或大数据机构评选,该年度科技进展由中国科学院院士和中国工程院院士投票产生,代表科学技术研究领域的最高水平。

    量子位
  • 用CSS画小猪佩奇,你就是下一个社会人!

    我是佩奇,哼,这是我的弟弟乔治,呱呱,这是我的妈妈,嚯,这是我的爸爸,嚯~

    鹅厂优文
  • JavaScript基本语法(一)

    1.什么是变量 2.为什么要使用变量 3.变量如何使用 4.原理图 5.变量命名规则和规范 6.变量的交换

    靠谱先生
  • js 事件笔记

    在Web中, 事件在浏览器窗口中被触发,执行事先绑定的事件处理器(也就是事件触发时会运行的代码块),对事件做出响应。 用户在浏览器的任何一个操作都会去触发一个事...

    bamboo
  • salesforce lightning零基础学习(五) 事件阶段(component events phase)

    上一篇介绍了lightning component events的简单介绍。此篇针对上一篇进行深入,主要讲的内容为component event中的阶段(Pha...

    用户1169343

扫码关注云+社区

领取腾讯云代金券