2014-08-29 83 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); 
    } 
} 

我希望做的是添加一個條件的「如果」它說:

「如果屬性‘翻譯’的子節點是不是「沒有」」或‘如果孩子節點沒有屬性‘翻譯’’

然後做動作

我知道不會有任何節點的對象屬性或滿足這將返回這個,但我不知道要寫什麼線來檢索它,或者甚至可能。

對於我來說,這個想法是在通過節點搜索時知道文本何時需要翻譯。

任何形式的幫助或建議表示讚賞。

回答

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

不幸的是,我不能使用類或id名稱,因爲我希望這可以與具有屬性「translate」的任何節點元素,類或id一起使用。因此,我不能調用$('。t')基本上,腳本應該適用於任何插入「translate」屬性的html頁面。 – David 2014-08-29 10:58:32

+0

你能像這樣使用 var attr = $('。t')。attr('translate');如果(child.nodeType === 3 && typeof(attr)==='undefined') // doaction else if(child.nodeType === 1) collectTextNodes(child); – 2014-08-29 11:04:48

+0

您仍在使用('.t') – David 2014-08-29 11:23:34