2013-08-22 53 views
0

我只想訪問藝術家的名字,在這種情況下,「槍炮玫瑰」。我已經有一個解決方案:http://jsfiddle.net/QRBgp/4/jQuery從最深的元素最佳實踐中獲取文本

但我感興趣的是有沒有更簡單的方法呢?更好的方法?我知道有人會說「如果有效,你爲什麼問」,但我很好奇。

HTML:

<div id="now_playing" class="tab ui-tabs-panel ui-widget-content ui-corner-bottom"> 
<div class="banner"> … </div> 
<div class="banner_wrap banner_top_left"></div> 
<div class="banner_wrap banner_bottom_left"></div> 
<div class="banner_wrap banner_top_right"></div> 
<div class="banner_wrap banner_bottom_right"></div> 
<div class="play-cont"> 
    <div class="curr-song-block clearfix"> 
     <div class="thumb"> … </div> 
     <div class="descr"> 
      <em> … </em> 
      <h3> … </h3> 
      <div class="data-block"> 
       <div class="data"> 
        <strong> by </strong> 
    Guns N Roses 
</div> 
       <div class="data"> 
        <strong> on </strong> 
    Appetite for Destruction 
</div> 
       </div> 
      </div><p> … </p> 
     </div> 
    </div> 
    <div id="accordion" class="ui-accordion ui-widget ui-helper-reset" role="tablist"> … </div> 
</div> 

的jQuery我用:

$(".data-block").click(function() { 
alert($('#now_playing').find('.descr').find('.data-block').find('.data:first-child').clone().children("strong").remove().end().text()); 
}); 
+0

您可能要張貼這http://codereview.stackexchange.com/ – Smeegs

+0

[選擇jQuery中最深的孩子](http://stackoverflow.com/questions/3787924/select-deepest-child-in-jquery) - 這是一個類似的問題。希望能幫助到你。 – ksalk

回答

1

你可以使用:

alert($('#now_playing .data:first').text().replace(/\s+by\s+/,'')); 
//or: 
alert($.trim($('#now_playing .data:first').contents()[2].textContent)); 

如果你想更短,雖然,它會更容易,如果你只是使用了元素你的文本節點 - 這將使這項工作更容易。如$("#now_playing .artist_name").text()

+0

我解析這個從我不擁有的網站,這就是爲什麼我不能「重構」的HTML;)謝謝你,我喜歡你的方法。 –

1

我很好奇爲什麼你不會簡單地將這個名字包裝在<span />中並給它一個類名。然後你可以按課程選擇它。這使得您的標記和代碼:a)更易於理解,b)更快,因爲您不必爲了刪除一個單詞而使用clone()任何東西。

HTML

<div class="data"> 
    <strong>by</strong> <span class="artist">Guns n' Roses</span> 
</div> 

jQuery的

#('#now-playing .descr .data:first-child').find('.artist').text(); 
+0

我從我沒有的網站解析這個,這就是爲什麼我不能「重構」HTML;) –

1
$(".data-block").click(function() { 
alert($(this).('.data:first-child').clone().children("strong").remove().end().text());});