jsDOM

DOM

DOM的概念

DOMDocument Object Model):文档对象模型。



 

 

整个文档是由一系列节点对象组成的一棵树

节点(Node);包括元素节点(1),属性节点(2)和文本节点(3)。

var th1 = document.getElementById("th1");
alert(th1.nodeType);
alert(th1.nodeName);
alert(th1.nodeValue);

th1代表一个元素节点(nodeType=1),nodename就是标签名(th),元素节点的nodeValue=null

var attr1 = th1.getAttributeNode("name");
alert(attr1.nodeType);
alert(attr1.nodeName);
alert(attr1.nodeValue);

getAttributeNode方法就是获取元素的属性节点,此时输出的节点类型为属性点(2),节点名称就是属性名(name),节点值就是属性值(sex

var txt1 = th1.firstChild;
alert(txt1.nodeType);
alert(txt1.nodeName);
alert(txt1.nodeValue);

txt1是一个文本节点(3),节点名称固定就是#text,节点值就是文本内容。

获取元素

1getElementById

根据元素的id'的属性来获取元素 ,获取到的是一个元素

(2)getElementByTagName

根据标签名来获取元素,结果是一个元素的结合。

(3)getElementsByClassName

根据class属性来获取元素,结果是一个元素的结合。

(4)getElementsByName

根据name属性来获取元素,结果是一个元素集合。

总结:获取元素可以根据签名获取、也可以根据idnameclass属性来获取。根据id属性获取的结果是一个元素,而其他的获取是一个集合。

document对象支持以上四种,而element对象仅支持getElement对象getElementsByTagNamegetElementByClassName

11.3修改元素

(1)修改内容

function fun(){
    //获取到指定元素
    var p1 = document.getElementById("p1");
    p1.innerText="我被单击了";
}

通过innerText属性可读取或设置标签的内部文本。

p1.innerHTML="我被单击了</br>换行了";

也可以通过innerHTML属性获取或设置内部文本。

两者的区别:innerHTML或按照html的规则解析文本,而innerText只是当做普通文本内容。

(2)修改样式

a.xxx.style.yyy(属性名)。

b.xxx.className=”……”(相当于修改了class属性)

<p id="p1">修改样式测试</p>
  <input type="button" value="样式1" οnclick="style1()">
  <input type="button" value="样式2" οnclick="style2()">
</body>
<script>
    var p1 = document.getElementById("p1")
    function style1(){
        p1.className = "style1"
    }
    function style2(){
        p1.className = "style2"
    }

添加和删除元素

 

(1)createElement创建一个元素节点。

createElement“p”,创建一个段落。

2createTextNode 创建一个文本节点。

createTextNode “文本内容”),创建一个值为“文本内容”的文本节点。

(3)appendChild添加子节点。

(4)removeChild删除字节点。

添加

<body>
    <div id="div1">

    </div>
    <input type="button" value="添加段落" οnclick="add()">
</body>
<script>
    var index = 1;
    function add(){
        //创建一个段落标签
     var p = document.createElement("p");
        var content = "第"+index+"段落";
        var txt =document.createTextNode(content);
        //文本节点添加到屏幕
        p.appendChild(txt);
        var div1 = document.getElementById("div1");
        //div1.appendChild(p);
        index++;

    }
</script>

 

删除

<body>
    <div id="div1">
      <p id="p1">1段段落</p>
      <p id="p2">2段段落</p>
      <p id="p3">3段段落</p>
      <p id="p4">4段段落</p>
    </div>
    <input type="button" value="删除段落" οnclick="del()">
</body>
<script>
    function del(){
        //找到父节点
        var div1 = document.getElementById("div1");
        //在找到删除的节点
        var p2 = document.getElementById("p2");
        //将要删除的节点从父节点中移除
        div1.removeChild(p2);
    }
</script>

这种方法是分别找到父节点和要删除的节点,然后执行删除操作。该方法的一个前提是知道父节点是谁

那么如果不知道父节点是谁,如何删除?

方法如下:

function del(){
    var p2 = document.getElementById("p2");
    p2.parentNode.removeChild(p2);
}

动态的添加和动态的删除:删除动态添加的奇数段落。

思路1:获取div1下的所有段落,遍历所有段落,将序号为奇数的段落删除

这种在初始时是可以的,但是随着动态添加或删除的进行,后面的结果就不对了。因为动态删除操作就影响了原来的顺序,而程序是按照序号去判断奇偶性,所以出现误判。

思路2:添加时通过设置class属性,然后getElementsByClassName来获取奇数行。

var index = 1;
function add(){
    //创建一个段落标签
 var p = document.createElement("p");
    var content = "第"+index+"段落";
    var txt =document.createTextNode(content);
    //文本节点添加到屏幕
    p.appendChild(txt);
    if(index%2 == 1){
        p.setAttribute("class","odd")
    }
    //将段落添加到div中
    var div1 = document.getElementById("div1");
    div1.appendChild(p);
    index++;
}
function del(){
    var div1 = document.getElementById("div1");
   /* var paras = div1.getElementsByTagName("p");
    for(var i in paras){
        if((i+1)%2 == 1){
         div1.removeChild(paras[i]);
        }
    }*/
    var paras = div1.getElementsByClassName("odd");
    for(var i=paras.length-1;i>=0;i--){
        div1.removeChild(paras[i]);
       //paras[i].style.display="none"
    }
}

导航

document:是根节点

prentNode:获取父节点

childNodes:获取所有的子节点

firstChild:第一个子节点

lastChild:获取最后一个子节点

<body>
    <div name="第一章">
        <p id="p1">第一段<span>第一句</span><span>第二句</span></p>
    </div>
    <input type="button" value="获取p1父节点的name属性" οnclick="fun1()"/>
    <input type="button" value="显示p1字节的个数" οnclick="fun2()"/>
    <input type="button" value="显示p1第一个子节点的节点类型" οnclick="fun3()"/>
    <input type="button" value="显示p1最后一个子节点的节点类型" οnclick="fun4()"/>
</body>
<script>
    function fun1(){
      var value = p1.parentNode().getAttributeNode("name");
        alert(value);
    }
    function fun2(){
        var childs = p1.childNodes;
        alert(childs.length);
    }
    function fun3(){
        var txt1 = p1.firstChild;
        alert(txt1.nodeType);
    }
    function fun4(){
        var txt1 = p1.lastChild;
        alert(txt1.nodeType);
    }
</script>

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js JSDOM is a JavaScript library that allows you to run a DOM (Document Object Model) implementation in Node.js. JSDOM simulates a browser's environment, enabling you to parse and manipulate HTML/XML documents using familiar DOM APIs. You can use JSDOM to perform tasks like web scraping, unit testing, and server-side rendering. It provides a way to create a virtual DOM that you can interact with programmatically. This makes it possible to access and modify elements, handle events, and perform other actions as if you were running JavaScript in a browser. To use JSDOM in your Node.js project, you need to first install it using npm or yarn. Here's an example of how to install it: ``` npm install jsdom ``` Once installed, you can require JSDOM in your Node.js script and start using its API. Here's a basic example: ```javascript const { JSDOM } = require('jsdom'); const dom = new JSDOM('<!DOCTYPE html><p>Hello world</p>'); const document = dom.window.document; console.log(document.querySelector('p').textContent); // Output: Hello world ``` In this example, we create a new JSDOM instance with an HTML document. We can then access the `document` object to perform various DOM operations, such as selecting elements using CSS selectors. JSDOM provides many other features and options, such as loading external scripts, handling resources like images and stylesheets, and executing JavaScript within the virtual DOM. You can refer to the official documentation for more information on how to use JSDOM effectively in your Node.js projects.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值