2010-03-25 54 views
1

我有以下DOM:JQuery的遍歷DOM並提取節點值

<div class="qtip qtip-light qtip-active"> 
    <div class="qtip-wrapper"> 
     <div class="qtip-borderTop"></div> 
     <div class="qtip-contentWrapper"> 
     <div class="qtip-title"> 
      <div class="qtip-button"></div> 
      **Text I need to extract** 
     </div> 
     <div class="qtip-content"> 
      <div class="tooltip"> 
       <div class="button-container"> 
        <script type="text/javascript"> 
      var link = null; 
      var link = $('.qtip-active > .qtip-title').val(); 
      $('.qtip-active > #button-container').append('<a href=\"mailto:' + link + '\">' + link + '</a>'); 
       </script> 
       </div> 
      </div> 
     </div> 
     </div> 
     <div class="qtip-borderBottom"></div> 
    </div> 
</div> 

但變量link永遠是不確定的,當我希望它返回文本中指定的節點。我已經閱讀了幾個小時的jquery文檔,但是我必須用我的邏輯(或者缺乏)來丟失一些東西。

理解任何幫助...

+1

我可以踢嗎?是的,你可以... – 2010-03-25 15:16:34

回答

4

嘗試:

var link = $('.qtip-active .qtip-title').text(); 

qtip-title實際上並不是qtip-active一個孩子。

只是爲了澄清:

$("a > b") 

意味着集中的所有ba元素的孩子的,而:

$("a b") 

意味着集合中的所有b元素是後裔a的元素。

並且當然qtip-title不是輸入元素,所以使用text()而不是val()

+0

非常感謝,非常清楚的解釋 – Alex 2010-03-26 12:46:25

4

jQuery的val函數返回一個表格元素(<input><select>,或<textarea>)的值。

您的.qtip-title是一個普通的HTML元素,所以您應該調用jQuery的text()函數來獲取元素的內容。


此外,您正在使用錯誤的選擇器。 A > Bchild selector,並且將與A元素內的所有B元素直接匹配。

你需要寫$('.qtip-active .qtip-title),使用descendant selector,以匹配出現內部.qtip-active任何地方都.qtip-title元素。


由於ryanulit指出,還需要第二選擇更改爲$('.qtip-active .button-container')

+1

另外,$('。qtip-active>#button-container')。append('' + link + '');需要更改爲$('。qtip-active .button-container')。append('' + link + ''); 。按鈕容器被用作一個類,而不是代碼中的一個id。而且,我建議將div外部的javascript作爲一個單獨的塊而不是它們內部的塊。 – ryanulit 2010-03-25 15:19:14