2013-07-03 4 views
3

Так я этот код, где он проверяет, если имя существует, и если он делает это удаляет калибровочный тег он вложен в.Удалить 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

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