2013-07-03 5 views
0
 <div class="myClass1"> 
      <span>tesutokana</span> 
     </div> 
     <div class="myClass2"> 
      <span>tesutoroma</span> 
     </div> 
     <div class="myClass1"> 
      <span>-</span> 
     </div> 
     <div class="myClass2"> 
      <span>-</span> 
     </div> 
     <div class="myClass1"> 
      <span>-</span> 
     </div> 
     <div class="myClass2"> 
      <span>-</span> 
     </div> 

Я хочу, чтобы удалить все дивы, которые только <span>-</span> из классов myClass1 и myClass2. Пробовал с .each(), но я не могу понять, что это за аргументы функции, которую я должен назвать. Любая помощь?Удалить все элементы, которые удовлетворяют условию

+0

Было бы хорошо, чтобы увидеть некоторые Javascript код ... –

+0

Тупой меня, забыл. Подожди секунду. –

+0

атрибуты данных являются хорошим подходом для таких вещей: '

-
' – Alp

ответ

2

Вы можете сделать это путем сравнения содержания пролете в состоянии:

$('.myClass1, .myClass2').each(function(){ 
    var mySpan = $(this).find('span'); 

    if(mySpan.text() == '-'){ 
     mySpan.closest('div').remove();  
    } 
}); 

Живой пример: http://jsfiddle.net/8CNkW/2/

Update:

Это одна не имеет проблем с текстами содержащую строку -, такую ​​как ---, test-test и т. д.

Плюш, на 80% быстрый эр чем contains вариант имени в других ответах: http://jsperf.com/just-a-demo

+0

Просто вычислил часть 'parent()' самостоятельно. Благодарю. –

+1

Я буду принимать это, так как это более интуитивно для меня, я предпочитаю использовать основные вещи, когда это не так сложно. Благодаря ответным словам. –

+0

Это кажется хорошим вариантом для '.filter': http://api.jquery.com/filter/. Пример: http://jsfiddle.net/8CNkW/3/. –

2

Используйте: содержит селектор

$("div span:contains(-)").remove(); 

Удалить все DIV:

$("div span:contains(-)").parent().remove(); 

JSFiddle

Обратите внимание, что это быстрый и грязное решение, поскольку оно удалит все span s, которые содержат -

+0

(+1) Хороший подход :) Но, возможно, ему нужно иметь дело с классами, а не только с div. – Alvaro

+1

, который будет '$ (". MyClass1, .myClass2 "). Find (" span: contains (-) "). Remove();' – Alp

+0

Это ALMOST работает, я хочу удалить весь div, а не только диапазон в пределах div. Кроме того, не удастся ли это удалить, например, строку «test-test», так как она содержит «-»? Это НЕ будет проблемой для моего конкретного случая, но я бы хотел увидеть решение. –

1

вот простое решение. fiddle

var doc = document.body; 
doc.innerHTML = doc.innerHTML.replace(/<div(\s)+(.)*class="myClass(1|2)"(.)*>(\s|\n|\t)*<span>-<\/span>(\s|\n|\t)*<\/div>/ig,''); 

это может быть самым быстрым решением, потому что он не использует петлю или внешнюю библиотеку.

или

var j = document.getElementsByClassName('myClass1'); 
var t = document.getElementsByClassName('myClass2'); 
var x = t.length--; 
while(x--) { 
    t[x].innerHTML = t[x].innerHTML.replace(/(<span>-<\/span>)/g,''); 
} 
x = j.length--; 

while(x--) { 
    j[x].innerHTML = j[x].innerHTML.replace(/(<span>-<\/span>)/g,''); 
} 

fiddle

0

Я хотел бы использовать .filter().

$('div').filter(function(){ 
    var $spans = $(this).find('> span'); 
    return $spans.length === 1 && $spans.text() === '-'; 
}).remove(); 

Вот краткий демо: http://jsfiddle.net/VbpzZ/1/

+0

Вы ничего не получаете от вызова' .eq'. Просто выполните '$ spans.text()'. –

+0

Я всегда стараюсь быть максимально ясным, даже когда мне это не нужно. Однако я скорректировал его, только потому, что ваш профиль - самый славный единорог, который я когда-либо видел. –

1

Вы можете использовать .filter(), чтобы сделать фильтрацию.

Just like that:

$('.myClass1,.myClass2').filter(function(i, el){ return el.innerHTML.trim() == '<span>-</span>' }).remove() 
+1

Это похоже на путь. Я бы, вероятно, использовал '$ .trim (el.innerHTML)'. Не уверен в поддержке браузером для string.trim(). –

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