Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 操纵jQuery节点的文本值_Javascript_Jquery - Fatal编程技术网

Javascript 操纵jQuery节点的文本值

Javascript 操纵jQuery节点的文本值,javascript,jquery,Javascript,Jquery,我选择了HTML页面上的所有节点,如下所示: var all = $('*'); 然后遍历每个节点,检查每个节点是否有关联的文本值: var newDom = all.map((i, node) => { if ($(node).text()) { var temp = $(node).text() + 'a'; $(node).text(temp); } }); 我最终希望在浏览器中查看被操纵的DOM。如果不进行上述操作,all.html()将生成所选的确

我选择了HTML页面上的所有节点,如下所示:

var all = $('*');
然后遍历每个节点,检查每个节点是否有关联的文本值:

var newDom = all.map((i, node) => {
  if ($(node).text()) {
     var temp = $(node).text() + 'a';
     $(node).text(temp);
  }
});
我最终希望在浏览器中查看被操纵的DOM。如果不进行上述操作,
all.html()
将生成所选的确切网页,正如我们所期望的那样。同时,
newDom.html()
产生以下错误:

Unhandled rejection Error: getaddrinfo ENOTFOUND on.ico on.ico:80
    at errnoException (dns.js:28:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:79:26)

乍一看,为什么它不能像我上面所说的那样工作?

文本节点没有选择器,但是您可以编写一个递归函数,将它们全部作为基于根节点的数组。然后,您可以在数组上循环并对文本节点执行操作,例如

/*以数组形式返回作为root的后代的所有文本节点
**@param{DOMElement}root-要从中开始的节点,默认为document.body
**@返回作为root的后代的所有文本节点的{Array}数组
*/
函数getTextNodes(根){
var root=root | | document.body;
var textNodes=[];
//不要在这些节点内处理文本
var elementsToIgnore={'script':true};
if(root&&root.nodeType==1){
Array.prototype.forEach.call(root.childNodes | |[root],函数(node){
if(node.nodeType==1&&node.tagName&!(elementsToIgnore中的node.tagName.toLowerCase()){
textNodes=textNodes.concat(getTextNodes(node));
}else if(node.nodeType==3){
textNodes.push(节点);
}
});
}else if(root.nodeType==3){
textNodes.push(根);
}
返回文本节点;
}
这里是一些文本

  • 清单项目1
  • 清单项目2
  • 清单项目2.1
  • 清单项目2.3
  • 清单项目3 这里也有文本

    将所有的“s”替换为$
  • 您做了哪些操作?你得到了什么结果?你期待什么?为什么不将代码作为可运行的代码段发布以显示您的问题?请注意,这将“获取匹配元素集中每个元素的组合文本内容,包括其子元素…”,因此如果存在子元素,您将获得大量冗余。另外,设置文本将删除现有内容,包括任何HTML。@RobG知道这一点很好,我相信这是我最终必须解决的问题。如果您只想更改文本,可能我应该使用contents(),您需要非常仔细地考虑您在做什么。纯javascript可能最适合这样做,因此您可以使用简单的DOM遍历函数在元素中的文本节点上进行迭代。@guest271314-“…替换整个内容…”表示它替换了所有内容。删除所有节点并替换为单个文本节点,请阅读源代码:
    this.empty().append((this[0]&&this[0]。ownerDocument | | document)。createTextNode(text))
    。当然,所有这些都可以用非常简单的
    元素代替。textContent=text