如何访问节点对象中的特定属性值?

时间:2014-08-29 10:36:26

标签: jquery html5 attributes translate

所以我正在编写一个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属性或方法会返回这个,但我无法确定要写入哪一行来检索它,或者它是否可能。

我的想法是知道在搜索节点时何时需要翻译文本。

感谢任何形式的帮助或建议。

2 个答案:

答案 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;然后再往树下走到它的孩子身边,继续前往它的下一个兄弟姐妹。