2013-07-03 148 views
3

所以我有這樣的代碼,它檢查,如果名稱存在,如果這樣做,將刪除span標記它的嵌套英寸刪除DOM元素,如果它包含一個字符串

<div id="box"> 
    <br> 
    <span style="font-size: 12px"> 
    <a> 
     <span style="color: #000000"> 
     <b>Name</b> 
     </span> 
    </a> 
    </span> 

但是名字也可以放置在這些標籤:

<br> 
    <span> 
    <a>Name</a> 
    </span> 
</div> 

我如何使用jquery來檢查它? 我已經試過:

$('span:contains("Name")').remove(); 
$('span > a > span b:contains("Name")').remove(); 

似乎沒有任何工作。

編輯#2:也有我剛剛包括他們的br標籤。我只想在刪除標籤之前刪除它們。

謝謝。

+6

「我會怎麼做呢?」並不是一個真正有效的標題。請用幾個字來描述你的問題 – Liam

+0

我是新對不起.. –

+0

$('span:contains(「Name」)')。remove()* * should * work,因爲文檔中說'匹配的文本可以直接出現在所選元素,任何元素的後代或其組合中。你能用簡單的[小提琴](http://jsfiddle.net/)重現你的問題嗎? –

回答

2

您可以使用filter()如果你想針對文本「名稱」究竟元素,還不如:contains將目標元素的文字,例如「名稱與其他一些文字...「:

集.load()回調函數內的代碼

$('#box').load('myUri', function() { 
    $('#box span').has('b, a').filter(function() { 
     return $.trim($(this).text()) === "Name"; 
    }).remove(); 
}); 

相當於:contains是:

$('#box span').has('b, a').filter(function(){ 
    return $(this).text().indexOf("Name") != -1; 
}).remove(); 

修訂如下評論:

$('#box').load('myUri', function() { 
    $('#box span').has('b, a').filter(function() { 
     var toRemoveSpan = $(this).text().indexOf("Name") != -1 ? true : false; 
     if (toRemoveSpan && $('span').prev('br').length) { 
      $(this).prev('br').remove() 
     } 
     return toRemoveSpan; 
    }).remove(); 
}); 

這將給予同樣的不僅僅是:$('#box').empty();

如果這不是你想要的行爲,你必須在你的問題中更具體。

+0

也有我剛剛包括他們的br標籤。我只想在刪除標籤之前刪除它們。 –

1

怎麼是這樣的:

$('a:contains("Name"),b:contains("Name")').parents("span").remove(); 
1

根據編輯,您需要在元素加載後執行腳本。

您需要使用加載方法的回調就做,如果你正在使用.load(),那麼它有一個成功回調,您可以調用這個

1

試試這個:

$(function() { 
    $('div#box span a span b:not(:contains("Name"))').remove(); 
}) 

DEMO

相關問題