032-Web前端-JS-Node节点

#6.16 长而精致

1. Node概述   2. Node的属性   3. Node的方法   4. HTML元素操作方法//了解   5. HTML内的元素的操作方法//了解,略


1.Node概述

DOM是文档对象模型的简称。它的基本思想是:把结构化文档解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和最终的树状结构,都有规范的对外接口,以达到使用编程语言操作文档的目的(比如增删内容)。所以,DOM可以理解成文档的编程接口。严格地说,DOM不属于JavaScript,但是操作DOM是JavaScript最常见的任务,而JavaScript也是最常用于DOM操作的语言,所以,DOM往往放在JavaScript里面介绍。

DEF:

node是DOM的最小组成单位,一个文档的树形结构就是由各种不同类型的节点组成。

对于HTML文档,node主要有以下六种类型:


2.Node的属性

(1)通用属性:nodeName、nodeType

(2)返回当前node的相关节点属性:ownerDocument、nextSiblingpreviousSiblingparentNodeparentElement

(3)返回node内容属性:textContent,nodeValue

(4)返回当前node子节点相关属性:childNodes,firstChild,lastChild


(1)通用属性

nodeName属性返回节点的名称,nodeType属性返回节点的常数值

//以document节点为例 

document.nodeName // "#document"

document.nodeType // 9



//通常来说,使用nodeType属性确定一个节点的类型比较方便

document.querySelector('a').nodeType === 1      // true

document.querySelector('a').nodeType === Node.ELEMENT_NODE  // true

//上面两种写法是等价的

 

(2)返回当前node的相关节点属性

ownerDocument

ownerDocument属性返回当前节点所在的顶层文档对象,即document对象。

var d = p.ownerDocument;

d === document // true

console.log(d.nodeName);//#document

注意:document对象本身的ownerDocument属性,返回null。

nextSibling //重点1

nextSibling属性返回紧跟在当前节点后面的第一个同级节点。如果当前节点后面没有同级节点,则返回null。

注意:因此如果当前节点后面有空格,该属性会返回一个文本节点,内容为空格(或回车)。

//H5部分,与下面很多方法公用的代码段:

<div  class="div1">div1

    <div  id="div2">div2</div>

</div>

<span>这是span标签</span>
//JS部分:

console.log(div2.nextSibling);

console.log(div1.nextSibling.nextSibling);

//查看div1的所有子节点

var el=div1.firstChild;

var i=1;

while(el){

console.log(i+'.'+el.nodeName);

el=el.nextSibling;

i++;

}

previousSibling //重点2

描述:previousSiblingnextSibling用法完全相同,唯一区别是它返回前一个兄弟节点

parentNode //重点3

描述:返回当前节点的父节点。

console.log(div2.parentNode.parentNode.parentNode.parentNode.parentNode);

注意:如果当前节点没有父节点,则返回null

parentElement属性

描述:parentElement属性返回当前节点的父元素节点。

如果当前节点没有父节点,或者父节点类型不是Element节点,则返回null

console.log(div2.parentNode.parentNode.parentNode.parentNode);

console.log(div2.parentElement.parentElement.parentElement.parentElement);//对比一下,到html就没了

(3)返回当前node的内容的属性

textContent

描述:返回当前节点和它的所有后代节点的文本内容。

var result=document.getElementById('divA').textContent// This is some text

console.log(result);

nodeValue

描述:nodeValue属性一般只用于Text节点

console.log(span.firstChild.nodeValue);

span.firstChild.nodeValue=‘新的span值';

(4)返回当前节点的子节点的属性

childNodes //重点4

描述:childNodes属性返回一个节点集合(NodeList),节点集合中包括当前节点的所有子节点

var childList=div1.childNodes;

console.log(childList);

console.log(childList.length);

console.log(childList instanceof  Array);

console.log(childList[1]);

firstChild/lastChild

描述:返回第一个\最后一个子节点,如果不存在返回null

console.log(div1.firstChild);

console.log(div1.lastChild);

3.Node的方法

(1)appendChild(),hasChildNodes()

(2)cloneNode(),insertBefore(),removeChild(),replaceChild()

(3)contains(),isEqualNode()


(1) appendChild()hasChildNodes()

1.appendChild()方法

描述:appendChild()方法接受一个节点对象作为参数,将其作为最后一个子节点,插入当前节点

语法:node.appendChild(子节点);

注意:js创建的节点对象之间是没有文本对象的

var div= document.querySelector('div');

var span=document.createElement('span');

span.innerHTML='这是span';

div.appendChild(span);

console.log(div.childNodes);

2.hasChildNodes()

描述:判断一个节点是否有子节点,如果有返回true,否则false

语法:node.hasChildNodes();

var div= document.querySelector('div');

var span= document.querySelector('span');

console.log(div.hasChildNodes());

console.log(span.hasChildNodes());

(2) cloneNode()insertBefore()removeChild()replaceChild()

3.cloneNode()方法

描述:cloneNode()方法用于克隆一个节点。它接受一个布尔值作为参数,

表示是否同时克隆子节点。默认是false,即不克隆子节点。

语法:node.cloneNode(boolean);

注意:

   a.拷贝的节点拥有和源节点一样的属性,但不会拷贝绑定的原节点事件

   b.深复制\浅复制

       不光拷贝当前节点,还会拷贝所有子节点(深复制:True参数)

       只拷贝当前节点,不拷贝子节点(浅复制:False/默认参数)

   c.啥叫拷贝:赋值一个节点,包括复制节点和属性

例子:

//H5部分新增的代码段

<button  id="but"  name=“but2”>点我</button>
//JS部分

   var but=  document.querySelector('button');

   but.onclick=function(){

   var newBut=but.cloneNode(true);//这时候克隆的还在内存里

   document.body.appendChild(newBut);//这时候页面里面才有

   }

下面几个方法的公用声明:

var div=document.querySelector('div');

var div1=document.querySelector('.div1');

var div2=document.getElementById('div2');

var but=document.getElementById('but');

4.insertBefore()方法

描述:insertBefore方法用于将某个节点插入当前节点的指定位置。

语法:node.insertBefore(newNode,subNode);

说明:

第一个参数是所要插入的节点,

第二个参数是当前节点的一个子节点,新的节点将插在这个节点的前面。

var span = document.createElement('span');
span.innerHTML='这是span';
var result=div.insertBefore(span,div.firstChild);
console.log(result);
console.log(div.childNodes);

5.removeChild()方法

描述:removeChild方法接受一个子节点作为参数,用于从当前节点移除该节点

语法:node.removeChild(node);

but.onclick=function(){
    if(div.hasChildNodes()){
        div.removeChild(div.firstChild);
    }
    else{
        alert('已经没有子节点了');
    }
}

6.replaceChild()方法

描述:replaceChild方法用于将一个新的节点,替换当前节点的某一个子节点。

语法:var replacedNode = parentNode.replaceChild(newChild, oldChild);

说明:它接受两个参数,第一个参数是用来替换的新节点,第二个参数将要被替换走的子节点。它返回被替换走的那个节点。

//例子1:

but.onclick=function(){

var span= document.createElement('span');  //创建一个span标签

span.innerHTML='这是span';

span.style.color='red';

div.replaceChild(span,div2);

}

//例子2:

but.onclick=function(){

var textNode= document.createTextNode('收藏');

    but.replaceChild(textNode,but.firstChild);

    but.setAttribute('disabled','disabled');

}

(3) contains()isEqualNode()

该部分公用H5代码:

<div>

    <div  class="div1">div1</div>

    <div  id="div2">div2</div>

</div>

该部分公用JS声明:

var div=document.querySelector('div');

var div1=document.querySelector('.div1');

var div11=document.querySelectorAll('.div1')[0];

var div2=document.getElementById('div2');

var span= document.querySelector('span');

var span1=document.getElementsByClassName('span1')[0];

1.contains()

描述:contains方法接受一个节点作为参数,返回一个布尔值。

    判断当前节点是否包含参数节点,包含返回true,否则false

语法:node.contains(antherNode);

var  result=div1.contains(div2);

console.log(result);

console.log(document.body.contains(div2));

2.isEqualNode()

描述:判断两个节点是否相等

注意:所谓相等的节点,指的是两个节点的类型相同、属性相同、子节点相同。

语法:node.isEqualNode(node2);

console.log(div1.isEqualNode(div11));

console.log(span.isEqualNode(span1));

4.HTML元素 //了解

html元素是网页的根元素,document.documentElement就指向这个元素。js中关于html元素也提供了一些相关的属性和方法来帮助我们更好的操作:

(1)视图窗口大小:clientWidth属性,clientHeight属性

(2)html元素大小:offsetWidth属性,offsetHeight属性

//只要当前的窗口大小发生了变化就会显示在这个数值上面

console.log('htmlClientWidth:'+document.documentElement.clientWidth);

console.log('htmlClientHeight:'+document.documentElement.clientHeight);

//html元素多大这里的数值就是多大

console.log('htmlOffsetWidth:'+document.documentElement.offsetWidth);

console.log("htmlOffsetHeight:"+document.documentElement.offsetHeight);

注:clientWidth和clientHeight这两个属性返回的是视口(viewport)的大小,单位为像素。clientWidth和clientHeight在计算视图大小的时候不计算滚动条部分window.innerWidth和window.innerHeight包括了滚动条的高度和宽度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
展示 OPC UA 节点可以分为以下几个步骤: 1. 前端 JavaScript 通过 HTTP 请求调用 Web API。 2. Web API 从 OPC UA 服务器中获取节点数据,并将数据以 JSON 格式返回给前端。 3. 前端 JavaScript 接收到返回的 JSON 数据后,解析数据并将数据渲染到 TreeView 中。 具体实现方式可以参照以下步骤: 1. 在 Web API 中使用 OPC UA 客户端库,如 node-opcua,连接 OPC UA 服务器,并获取节点数据。 2. 将获取到的节点数据转换为 JSON 格式,并使用 HTTP 协议将 JSON 数据返回给前端。 3. 在前端 JavaScript 中,使用 jQuery 或原生的 XMLHttpRequest 对象发送 HTTP 请求,获取 Web API 返回的 JSON 数据。 4. 解析 JSON 数据,并将数据渲染到 TreeView 中显示。 下面是一个简单的代码示例: Web API 代码: ```javascript const opcua = require("node-opcua"); const express = require("express"); const app = express(); const serverEndpointUrl = "opc.tcp://localhost:4840"; const client = new opcua.OPCUAClient(); let session; // 连接 OPC UA 服务器 client.connect(serverEndpointUrl, function (err) { if (err) { console.log("Cannot connect to server: ", err); } else { console.log("Connected to OPC UA server"); client.createSession(function (err, sess) { if (err) { console.log("Cannot create session: ", err); } else { console.log("Session created"); session = sess; } }); } }); // 获取节点数据 app.get("/opcua/nodes", (req, res) => { const rootFolderId = opcua.resolveNodeId("RootFolder"); session.browse(rootFolderId, function (err, browseResult) { if (err) { console.log("Cannot browse nodes: ", err); res.status(500).send({ error: "Cannot browse nodes" }); } else { const nodes = browseResult.references.map((node) => { return { id: node.nodeId.toString(), name: node.browseName.name.toString(), }; }); res.send(nodes); } }); }); app.listen(3000, () => console.log("Web API listening on port 3000")); ``` 前端 JavaScript 代码: ```javascript // 发送 HTTP 请求 $.get("http://localhost:3000/opcua/nodes", function (data) { // 解析 JSON 数据 var nodes = JSON.parse(data); // 渲染节点数据到 TreeView 中 var treeView = $("#treeView").kendoTreeView({ dataSource: nodes, dataTextField: "name", dataValueField: "id", }).data("kendoTreeView"); }); ``` 以上示例中,Web API 使用了 node-opcua 库连接 OPC UA 服务器,并通过 Express 框架提供 HTTP 服务。前端 JavaScript 使用了 jQuery 库发送 HTTP 请求,并使用 kendoTreeView 插件将节点数据渲染到 TreeView 中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值