javascript中DOM扩展

javascript中DOM扩展

一、selectors API

document.querySelector()
其中可以是标签名,类名,id名。
document.querySelectorAll()
其中也可以传入标签名,类名,id名。其最终传出的是一个HTMLCollection,是一个类数组。所以可以对其进行遍历。

//三种遍历方式
for(let i = 0 ;i<div.length;i++){
      div[i].className = "name";
    }
     
    // for-of进行遍历
    for(let item of div){
      item.className = "name";
    }

    // 使用item()来
    for(let i =0;i<div.length;i++){
      div.item(i).className = "name"
    }

matches()方法:作用是判断该标签是否存在class类或者是id。

    let div = document.querySelectorAll("div");
    for(let i = 0 ;i<div.length;i++){
      console.log(div.item(i).matches("#say"));
    }

二、元素遍历

以前使用childNodes等相关的属性,返回是一个包含文本,标签,注释等数组。所以为了更好的遍历其子元素的标签数组。存在以下属性。
childElementCount: 返回子节点中的标签节点的数量。
firstElementChild : 返回的是第一个子标签节点
lastElementChild: 返回的是最后一个子标签节点
previousElementSibling: 返回的是该节点之前的兄弟节点。
nextElementSibling: 返回的是该节点之后的兄弟节点。

三、HTML5扩展

①css类扩展
getElementsByClassName() 其中传入的是class属性值,最终得到的是一个类数组。
classList属性:得到的是该标签的全部的class属性。是一个类数组。该数组也存在一些方法。
add(value) :向该标签中新增添一个属性。
contains(value) :返回的是布尔值,判断该标签是否存在value属性。
remove(value) :删除该标签中的value属性。
toggle(value) :进行切换,如果该属性存在,则删除,如果不存在,则添加。
②、焦点管理
document.activeElement:保存的是dom中获得焦点的元素。
focus() : 将焦点设置给标签上。
document.focus():判断文档是否保存焦点。
相关代码:

      let input = document.getElementsByTagName("input")[0];
      input.focus();
      console.log(document.activeElement == input);
      console.log(document.hasFocus());
      document.hasFocus()//表示整个文档是否获得焦点

③HTMLDocument扩展
document.readyState属性 :判断文档加载状态。
两个状态:loadingcomplete
document.compatMode属性:判断当前是什么渲染模式
两种模式:Css1CompatBackCompat
④字符集属性 document.characterSet:这里是判断字符集属性。meta中的charset。

四、自定义数据属性

在一个标签中可以使用data-来自定义属性,当使用dataset来进行访问的时候,是一个Map类型的数据,可以使用dataset.属性名来获取属性,并且需要注意的是属性全部需要小写。如果遇到例如data-my-set需要使用dataset.mySet来获取数据。

      let div = document.getElementsByTagName("div")[0];
      console.log(div.dataset);
      console.log(div.dataset.name);
      console.log(div.dataset.age);
      console.log(div.dataset.mySex);
五、插入标记

一、innerHTML属性 :可以获取innerHTML中的全部内容,并且可以识别标签
也可以设置innerHTML。
不过需要注意在设置innerHTML需要考虑性能问题。

    let ul = document.querySelector("ul");
    let values = ['张三','王五','赵四'];
    for(let value of values){
      ul.innerHTML += `<li>${value}</li>`
    }
    //这样的性能不好,因为其不断的进行取出更换,相比于此下面两种性能优化更好。

这样的性能不好,因为其不断的进行取出更换,相比于此下面两种性能优化更好。

    let ul = document.querySelector("ul");
    let values = ["张三","王五",'赵四']
    let inner  = "";
    for(let value of values){
      inner += `<li>${value}</li>`
    }
    ul.innerHTML = inner;

    // 方法二
    let ul = document.querySelector("ul");
    let values = ["张三","王五",'赵四']
    ul.innerHTML = values.map(value=>`<li>${value}</li>`).join("");

innerHTML中插入script标签,该标签不会别执行。
outerHTML属性 :outerHTML包括本身节点以及其内部的子字符串的字符集合

<!DOCTYPE html>
<html lang="cn">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="content">
    <p>This is a</p>
    <ul>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
    </ul>
  </div>
  <script>
    let content = document.getElementById("content");
    console.log(content.outerHTML);
    // outerHTML包括本身节点以及其内部的子字符串的字符集合
    
  </script>
</body>
</html>

insertAdjacentHTML()和insetAdjacentText()方法:
包含以下属性:beforebegin,afterbegin,afterend,beforeend

 <script>
    let p = document.querySelector("p");
    p.insertAdjacentHTML('beforebegin', "<p>大家好</p>"); // 将标签插入到<p>标签之前
    p.insertAdjacentText('beforebegin', "<p>大家好</p>"); // 将字符串插入到<p>标签之前


    p.insertAdjacentHTML("afterbegin", "<p>大家好</p>");  //将标签插入到<p>标签之后
    p.insertAdjacentText("afterbegin", '大家好');  //将标签插入到<p>标签之后

    p.insertAdjacentHTML("beforeend", "大家好");   //将标签插入到</p>标签之前
    p.insertAdjacentText("beforeend", '大家好');  //将文本插入</p>标签之前

    p.insertAdjacentHTML("afterend", "大家好");  //将标签插入到</p>标签之后
    p.insertAdjacentText("afterend", '大家好');  //将文本插入到</p>标签纸后
  </script>

scrollIntoView() 方法存在于HTML元素上,可以将标签元素移动到视野的某一个区域。
属性:alignToTop:true窗口滚动后元素的顶部与视口顶部对齐
false:窗口滚动后元素的底部与视口底部对齐。
behavior :定义动画行为,smooth,auto
block :定义垂直对齐方式,start,end,center,nearest
inline :定义水平方向的对齐方式,start,center,end,nearest.

<!DOCTYPE html>
<html lang="cn">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    *{
      margin: 0px;
      padding: 0px;
    }
    .header{
      width: 100%;
      height: 100px;
      background: red;
      position: fixed;
    }
    .nav{
      position: fixed;
      left: 10px;
      top: 200px;
      background: green;
    }
    .nav ul{
      width: 60px;
    }
    ul li{
      border: 1px solid #000;
      width: 60px;
      height: 30px;
      text-align: center;
      color: white;
      cursor: pointer;
    }
    .main div{
      height: 500px;
      text-align: center;
      line-height: 500px;
      border: 1px solid #000;
    }
  </style>
</head>
<body>
  <div class="header"></div>
  <div class="nav">
    <ul>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
    </ul>
  </div>
  <div class="main">
    <div>这里是第一页</div>
    <div>这里是第二页</div>
    <div>这里是第三页</div>
    <div>这里是第四页</div>
    <div>这里是第五页</div>
    <div>这里是第六页</div>
    <div>这里是第七页</div>
    <div>这里是第八页</div>
  </div>
  <script>
    let ul_li = document.querySelectorAll("li");
    let div = document.querySelectorAll(".main div");
    for(let i = 0;i<ul_li.length;i++){
      ul_li[i].addEventListener('click',function(){
        div[i].scrollIntoView({behavior:"smooth",block:"center"})
      })
    }
  </script>

  <!-- 解析:这里使用的是scrollIntoView()方法,目的就是将某一个对象移动到视野中央
  其中存在参数如果使用
  alignToTop参数是一个布尔值
   div[i].scrollIntoView(true),传入true表示窗口滚动后元素的顶部与视口顶部对齐
   false表示窗口滚动后元素的底部与视口底部对齐
   scrollIntoViewOptions是一个选项对象,behavior定义过渡动画,可选smooth和auto,
   block定义垂直方向的位置,
   inline定义水平方向的位置
  -->

</body>
</html>

children属性:获取该标签子元素中全部的节点标签。
contains() :判断一个节点是否包含另一个节点,如果包含返回true。
innerText :设置标签节点的文本,并且也可以取出标签节点的全部文本,是将标签去除。
outerText: 取出该标签包含的全部文本,当对其进行设置的时候,会将该标签进行覆盖。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
可以使用 `chrome.contextMenus` API 在右键菜单添加一个选项,然后使用 `chrome.devtools.panels` API 在开发者工具面板注入脚本,以便在用户单击右键菜单项时运行该脚本。以下是一个简单的示例: 1. 在 `manifest.json` 文件声明 `contextMenus` 和 `devtools` 权限: ```json { "name": "My extension", "version": "1.0", "permissions": [ "contextMenus", "devtools", "activeTab" ], "background": { "scripts": ["background.js"] }, "manifest_version": 2 } ``` 2. 在 `background.js` 文件创建一个右键菜单项,并将其与 `devtools` 面板的脚本关联起来: ```javascript chrome.contextMenus.create({ id: "myContextMenu", title: "My Context Menu", contexts: ["all"] }); chrome.contextMenus.onClicked.addListener(function(info, tab) { if (info.menuItemId === "myContextMenu") { chrome.devtools.panels.openResource("panel.html", function(panel) { panel.onShown.addListener(function(panelWindow) { panelWindow.runScript(info); }); }); } }); ``` 3. 在 `panel.html` 文件注入要运行的脚本: ```html <!DOCTYPE html> <html> <head> <title>My Panel</title> <script src="panel.js"></script> </head> <body> </body> </html> ``` 4. 在 `panel.js` 文件编写要运行的脚本: ```javascript function runScript(info) { // 获取用户选DOM 元素 var selectedElement = info.selectionText; // 在控制台输出选DOM 元素 console.log(selectedElement); } ``` 当用户在网页选择一个 DOM 元素并单击右键时,右键菜单项 "My Context Menu" 将会显示。如果用户单击该菜单项,则会在开发者工具面板打开 `panel.html` 文件,并将选DOM 元素传递给 `panel.js` 脚本的 `runScript()` 函数。在这个函数,你可以执行任何你想要的操作,例如在控制台输出选DOM 元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值