Javascript 操纵jQuery节点的文本值
我选择了HTML页面上的所有节点,如下所示: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()将生成所选的确
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
。