前端 - JavaScript(WebAPI)

JavaScript(WebAPI)

什么是 WebAPI

前面学习的 JS 分成三个大的部分

  • ECMAScript: 基础语法部分
  • DOM API: 操作页面结构
  • BOM API: 操作浏览器

WebAPI 就包含了 DOM + BOM.

这个是 W3C 组织规定的. (和制定 ECMAScript 标准的大佬们不是一伙人).

前面学的 JS 基础语法主要学的是 ECMAScript, 这让我们建立基本的编程思维.相当于练武需要先 扎马步.

但是真正来写一个更加复杂的有交互式的页面, 还需要 WebAPI 的支持. 相当于各种招式.

什么是 API

API 是一个更广义的概念. 而 WebAPI 是一个更具体的概念, 特指 DOM+BOM

所谓的 API 本质上就是一些现成的函数/对象, 让程序猿拿来就用, 方便开发.

相当于一个工具箱. 只不过程序猿用的工具箱数目繁多, 功能复杂.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sNSe9o0J-1651152483042)(media/6fad9ff70a102688763262403c3b9e98.jpeg)]

API 参考文档

https://developer.mozilla.org/zh-CN/docs/Web/API

可以在搜索引擎中按照 “MDN + API 关键字” 的方式搜索, 也能快速找到需要的 API 文档.

DOM 基本概念

什么是 DOM

DOM 全称为 Document Object Model.

W3C 标准给我们提供了一系列的函数, 让我们可以操作:

  • 网页内容
  • 网页结构
  • 网页样式

DOM 树

一个页面的结构是一个树形结构, 称为 DOM 树.

树形结构在数据结构阶段会介绍.就可以简单理解成类似于 “家谱” 这种结构

页面结构形如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LzFwZ638-1651152483044)(media/8c9e0563af87da570a4bf153b42628ab.jpeg)]

DOM 树结构形如

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q2axXKUL-1651152483045)(media/859258f2fe081dde7a1cd73780b0dbb9.jpeg)]

重要概念:

  • 文档: 一个页面就是一个 文档, 使用 document 表示.
  • 元素:页面中所有的标签都称为 元素. 使用 element 表示.
  • 节点: 网页中所有的内容都可以称为 节点(标签节点, 注释节点, 文本节点,属性节点等). 使用 node表示.

这些文档等概念在 JS 代码中就对应一个个的对象.

所以才叫 “文档对象模型” .
在这里插入图片描述

获取元素

这部分工作类似于 CSS 选择器的功能.

querySelector

这个是 HTML5 新增的, IE9 及以上版本才能使用.

前面的几种方式获取元素的时候都比较麻烦. 而使用 querySelector能够完全复用前面学过的 CSS 选择 器知识, 达到更快捷更精准的方式获取到元素对象.

var element = document.querySelector(selectors);
  • selectors 包含一个或多个要匹配的选择器的DOM字符串DOMString。该字符串必须是有效的 CSS选择器字符串;如果不是,则引发 SYNTAX_ERR 异常
  • 表示文档中与指定的一组CSS选择器匹配的第一个元素的 html元素Element对象.
  • 如果您需要与指定选择器匹配的所有元素的列表,则应该使用querySelectorAll()
  • 可以在任何元素上调用,不仅仅是document。调用这个方法的元素将作为本次查找的根元素

正因为参数是选择器, 所以一定要通过特殊符号指定是哪种选择器. 例如 .box是类选择器, #star 是 id 选择器 等.

<div class="box">abc</div>
<div id="id">def</div>
<h3><span><input type="text"></span></h3>
<script>
   var elem1 = document.querySelector('.box');
   console.log(elem1);
   var elem2 = document.querySelector('#id');
   console.log(elem2);
   var elem3 = document.querySelector('h3 span input');
   console.log(elem3);
</script>

querySelectorAll

使用 querySelectorAll 用法和上面类似.
在这里插入图片描述

事件初识

基本概念

JS 要构建动态页面, 就需要感知到用户的行为.

用户对于页面的一些操作(点击, 选择, 修改等) 操作都会在浏览器中产生一个个事件, 被
JS 获取到, 从而进 行更复杂的交互操作.

浏览器就是一个哨兵, 在侦查敌情(用户行为). 一旦用户有反应(触发具体动作),哨兵就会点燃烽火 台的狼烟(事件),
后方就可以根据狼烟来决定下一步的对敌策略.

事件三要素

1. 事件源: 哪个元素触发的
2. 事件类型: 是点击, 选中, 还是修改?
3. 事件处理程序: 进一步如何处理. 往往是一个回调函数.

简单示例

<button id="btn">点我一下</button>
<script>
   var btn = document.getElementById('btn');
   btn.onclick = function () {
   
       alert("hello world");
  }
</script>
  • btn 按钮就是事件源.
  • 点击就是事件类型
  • function 这个匿名函数就是事件处理程序
  • 其中 btn.onclick = function() 这个操作称为 注册事件/绑定事件

注意: 这个匿名函数相当于一个回调函数, 这个函数不需要程序猿主动来调用,而是交给浏览器, 由浏览器 自动在合适的时机(触发点击操作时) 进行调用.

操作元素

获取/修改元素内容

在这里插入图片描述

innerText

Element.innerText属性表示一个节点及其后代的“渲染”文本内容

// 读操作
var renderedText = HTMLElement.innerText;
// 写操作
HTMLElement.innerText = string;

不识别 html 标签. 是非标准的(IE发起的). 读取结果不保留html源码中的 换行 和 空格.

<div>
   <span>hello world</span>
   <span>hello world</span>
</div>
<script>
   var div = document.querySelector('div');
   // 读取 div 内部内容
   console.log(div.innerText);
   // 修改 div 内部内容, 界面上就会同步修改
   div.innerText = 'hello js <span>hello js</span>';
</script>

可以看到, 通过 innerText 无法获取到 div 内部的 html 结构, 只能得到文本内容.

修改页面的时候也会把 span 标签当成文本进行设置.

innerHTML

Element.innerHTML属性设置或获取HTML语法表示的元素的后代.

// 读操作
var content = element.innerHTML;
// 写操作
element.innerHTML = htmlString;

1. 先获取到事件源的元素

2. 注册事件

识别 html 标签. W3C 标准的. 读取结果保留html源码中的 换行 和 空格.

<div>
   <span>hello world</span>
   <span>hello world</span>
</div>
<script>
   var div = document.querySelector('div');
   // 读取页面内容
   console.log(div.innerHTML);
   // 修改页面内容
   div.innerHTML = '<span>hello js</span>'
</script>

可以看到 innerHTML 不光能获取到页面的 html 结构, 同时也能修改结构.
并且获取到的内容保留的空 格和换行.

innerHTML 用的场景比 innerText 更多.
在这里插入图片描述

获取/修改元素属性

可以通过 Element 对象的属性来直接修改, 就能影响到页面显示效果.

<img src="rose.jpg" alt="这是一朵花" title="玫瑰花">
<script>
   var img = document.querySelector('img');
   console.dir(img);
</script>

此时可以看到 img 这个 Element对象中有很多属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bTYCKyIO-1651152483045)(media/825bc7e5776838330594df69983db2db.jpeg)]

在这里插入图片描述

我们可以在代码中直接通过这些属性来获取属性的值.

<img src="rose.jpg" alt="这是一朵花" title="玫瑰花">
<script>
   var img = document.querySelector('img');
   // console.dir(img);
   console.log(img.src);
   console.log(img.title);
   console.log(img.alt);
</script>

在这里插入图片描述

还可以直接修改属性

<img src="rose.jpg" alt="这是一朵花" title="玫瑰花">
<script>
   var img = document.querySelector('img');
   img.onclick = function () {
   
       if (img.src.lastIndexOf('rose.jpg') !== -1) {
   
           img.src = '
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值