所以我正在编写一个html网页,并在代码的不同部分使用“translate”属性,如下所示:
<div class="art-nav-outer">
<div class="art-nav-wrapper">
<div class="art-nav-inner">
<ul class="art-hmenu">
<li>
<a href="#">
<span class="l"></span>
<span class="r"></span>
<span class="t" translate="no">Introduction</span>
</a>
</li>
<li>
<a href="#" class="active">
<span class="l"></span>
<span class="r"></span>
<span class="t" translate="no">Content</span>
</a>
</li>
</ul>
</div>
</div>
</div>
我正在使用collectTextNodes($('body'));
循环代码。
这是函数声明:
function collectTextNodes(element){
for (var child= element.firstChild; child!==null; child= child.nextSibling) {
if(child.nodeType === 3 && ...)
//doaction
else if(child.nodeType === 1)
collectTextNodes(child);
}
}
我想做的是为'if'添加一个条件:
'如果子节点的属性“translate”不是“no”'或'如果子节点没有属性“translate”'
然后做行动
我知道没有任何节点的Object属性或方法会返回这个,但我无法确定要写入哪一行来检索它,或者它是否可能。
我的想法是知道在搜索节点时何时需要翻译文本。
感谢任何形式的帮助或建议。
答案 0 :(得分:0)
for (var child = element.firstChild; child !== null; child = child.nextSibling) {
var attr = $(this).attr('translate');
if (child.nodeType === 3 && typeof (attr) === 'undefined') alert('1');
else if (child.nodeType === 1) collectTextNodes(child);
}
答案 1 :(得分:0)
我找到了解决方案。
问题在于写作时:
function collectTextNodes(element){
for (var child= element.firstChild; child!==null; child= child.nextSibling) {
if(child.nodeType === 3 && ...)
//doaction
else if(child.nodeType === 1)
collectTextNodes(child);
}
}
child.nodeType == 3为所有文本节点返回true,child.hasAttribute(&#34; translate&#34;)搜索此节点是否具有属性&#34; translate&#34;但如果它是一个文本节点,那么它就不会拥有任何属性,如果它具有该属性,那么它就不会成为文本。在这种情况下,永远不会满足if条件。
正确的解决方案是:
function collectTextNodes(element, texts){
for (var child= element.firstChild; child!==null; child= child.nextSibling) {
if (child.nodeType === 3)
{
texts.push(child);
}
else if (child.nodeType === 1)
{
if(!(child.hasAttribute('translate') && $(child).attr('translate') == "no"))
{
collectTextNodes(child, texts);
}
}
}
}
在这种情况下,如果节点是一个元素,并且该元素具有属性&#34; translate&#34;和属性&#34;翻译&#34; ==&#34;不&#34;然后再往树下走到它的孩子身边,继续前往它的下一个兄弟姐妹。