$v) { echo "\n"; echo "$k\n"-6ren">
gpt4 book ai didi

javascript - 使用 javascript 从特定 div 标签中删除所有文本节点

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:02 25 4
gpt4 key购买 nike

我有一些从 php 脚本动态生成的 html。 php代码是这样的

echo "<div id='categories'>\n";
foreach($category as $k => $v)
{
echo "<div class='category'>\n";
echo "<div id=\"$k\" class='cat_name'\n>$k</div>\n";
echo "<div id=\"$k".'_link"'." class='cat_link'>\n<a href=$v>Link</a>\n</div>\n";
echo "</div>\n";
}
echo "</div>\n";

我有一个 javascript 文件尝试像这样访问 dom

var categories=document.getElementById('categories').childNodes;
for(i=0;i<categories.length;i++)
{
var link=categories[i].childNodes[1].childNodes[0].attributes['href'];
..
...
..

现在这不能按预期工作,因为 html 中有文本节点。当我使用 firebug 控制台 来尝试这个

document.getElementById('categories').childNodes[0].nodeType; // displays 3 

它显示3,这意味着该节点是一个文本节点。我尝试像这样在 window.onload 中添加 document.normalize();

window.onload=function() {
document.normalize();
var categories=document.getElementById('categories').childNodes;
...
...

但文本节点仍保留在 html 中。我怎样才能删除所有的文本节点。现在我认为没有像 getElementByType() 这样的方法,那么我如何获取所有文本节点。

最佳答案

使用 .children 而不是 .childNodes 仅定位元素(无文本节点):

   // --------------------------------------------------v
var categories=document.getElementById('categories').children;

FF3 不支持该属性,因此如果您支持该浏览器,则需要一种方法来复制它。

function children( parent ) {
var node = parent.firstChild;
var result = [];
if( node ) {
do {
if( node.nodeType === 1 ) {
result.push( node );
}
} while( node = node.nextSibling )
}
return result;
}
var parent = document.getElementById('categories');
var categories= parent.children || children( parent );

还要注意,IE 也会给你评论节点,所以如果你的标记不包含评论会更好。

关于javascript - 使用 javascript 从特定 div 标签中删除所有文本节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6472464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com