2014-08-29 3 views
0

Так я кодирования веб-страницы в HTML, и я с помощью «перевести» атрибут в различных частях моего кода следующим образом:Как получить доступ к определенному значению атрибута в объекте узла?

<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); 
    } 
} 

То, что я хотел бы сделать, это добавить условие к «если», который говорит:

«, если атрибут„перевести“из дочернего узла не является «нет»»или„если дочерний узел не имеет атрибут „перевести““

затем сделать Действие

Я знаю, что нет каких-либо свойств объекта узла или встречались hods, который вернет это, но я не могу понять, какую строку писать, чтобы получить его, или если это возможно.

Идея для меня - знать, когда текст нужно перевести или нет при поиске по узлам.

Любая помощь или совет приветствуются.

ответ

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 возвращает истинное для всех текстовых узлов и child.hasAttribute («перевод») ищет, если этот узел имеет атрибут «перевести», но если это текстовый узел, то он не будет иметь никаких атрибутов, и если у него есть атрибут, это не будет текст. В этом случае условие 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); 
      } 
     } 
    } 
} 

В этом случае, если узел является элементом и этот элемент имеет атрибут «перевести» и атрибут «переводить» == «нет», то идти дальше вниз дерево к его ребенку, иначе переходите к следующему брату.

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); 
} 
+0

К сожалению, я не могу использовать имена классов или идентификаторов, поскольку я хочу, чтобы это работало с любым элементом, классом или идентификатором узла, который имеет атрибут «translate». Таким образом, я не могу вызывать $ ('. T') В основном сценарий должен работать для любой html-страницы, в которую я вставляю атрибут «translate». – David

+0

Можете ли вы использовать вот так: var attr = $ ('. T'). Attr ('translate'); if (child.nodeType === 3 && typeof (attr) === 'undefined') // doaction else if (child.nodeType === 1) collectTextNodes (child); –

+0

Вы по-прежнему используете ('.t') – David

Смежные вопросы