JQuery удалить тег для пользовательского элемента - PullRequest
3 голосов
/ 11 февраля 2010

У меня есть следующая разметка, сгенерированная динамически с помощью функции split и join

<span>
    <em style="position: relative;">T</em>
    <em class="good" style="position: relative;">H</em>
    <em style="position: relative;">E</em>
    <em style="position: relative;">S</em>
</span>

Я хочу удалить тег em для элементов, для которых класс «good» не включен. Получите что-то вроде этого:

<span>
    T <em class="good" style="position: relative;">H</em> ES
</span>

Я подумал, что могу использовать для этого распаковку, но она не работает:

$(document).ready(function(){
$("#njoin").live('click', function(){
$('em').each(function() {
    if ($(this).hasClass('good')) {
         $('.good').unwrap();
    }
});         
});
});

Что я должен сделать, чтобы это работало? Спасибо

Ответы [ 5 ]

3 голосов
/ 11 февраля 2010
$('em').each(function(){
if(!$(this).hasClass('good'))
   $(this).remove();
});

Должно быть так просто.

1 голос
/ 11 февраля 2010

Это:

$('em:not(.good)').replaceWith(function(){
    return document.createTextNode($(this).text());
});

Если вам нужно предотвратить пробелы между любыми полученными элементами, не ставьте пробелы между ними в исходном HTML.

0 голосов
/ 12 февраля 2010

Как предлагали другие, было бы идеально удалить лишний html со страницы, чтобы он никогда не передавался клиенту, но это должно работать в вашей ситуации:

$("#njoin").live('click', function(){
    $('em').each(function(){ 
        if(!$(this).hasClass('good')) 
        {
            this.outerHTML = $(this).html();
        }
    });
});

Редактировать: Рабочий пример

0 голосов
/ 11 февраля 2010

В jQuery 1.4 появилась функция unwrap () (как вы упомянули) - есть ли у вас проблемы с добавлением тега?:

$('em:not(".good")')
  .each(function() { this.innerHTML = '<span>' + this.innerHTML + '</span>'; })
  .find('span').each(function() { $(this).unwrap(); });

Результат:

<span><span>T</span> <em class="good" style="position: relative;">H</em> <span>E</span><span>S</span></span>
0 голосов
/ 11 февраля 2010

вы можете попробовать

$('#njoin').click(function() {
    $('em').each(function() {
        if($(this:not).hasClass('good')) {
            $('.good').remove();
        }
    });
});
...