2011-03-21 3 views
0

Есть ли способ в jQuery удалить все дочерние узлы, но оставить текст в узле?Как удалить все дочерние узлы, но оставить фактические данные?

Такие, как:

<div> 
    Hello 
    <span>World</span> 
</div> 

Результат будет выглядеть так:

<div> 
    Hello 
</div> 
+3

Ваш результат совпадает с отправной точкой. Возможно, вы хотели удалить элемент '', но оставить свой текст? –

+0

это то же самое! – Neal

+0

отредактируйте ответ, потому что результат выглядит так, как будто ничего не было удалено. и все это можно сделать довольно просто, вам просто нужно выполнить цикл (google: jquery each) через каждого дочернего элемента, получить содержимое внутреннего html (google: jquery html()) сохранить все в одной переменной, а затем заменить html родительский узел с тем, что вы получили от каждого ребенка (google: jquery html()). –

ответ

5

Попробуйте это:

$('div').children().remove() 
+0

im not sure, почему это было отклонено. может кто-нибудь объяснить? – Neal

+0

Я не проголосовал, но похоже, что вы усложняете что-то довольно простое. –

+0

FYI, если это то, что он хочет, '$ ('div'). Children(). Remove()' работает. –

7

Предполагая, что вы на самом деле хотите:

<div>Hello World</div> 

в результате:

var node = $('#yourDiv'); 
node.text(node.text()); 
+0

изменил это из 'node.html (node.text())', поскольку это может привести к тому, что HTML в тексте (например, пример кода на этой странице) будет преобразован в новые узлы DOM. –

+0

Спасибо. Я не знал об этой заметке. Text(). Но это было не совсем то, что я искал. +1 – chustar

0

Вот простой плагин, чтобы сделать это для вас рекурсивно (если у вас есть несколько глубин детей):

$.fn.extend({ 
    stripChildren : function() { 
     $(this).children().each(function() { 
      if ($(this).children().size() > 0) 
      $(this).stripChildren(); 
      else 
      $(this).replaceWith($(this).html()); 
      $(this).parent().stripChildren(); 
     }); 
    } 
}); 

Чтобы использовать это просто:

$(document).ready(function() { 
    $('div').stripChildren(); 
}); 
+1

um, это действительно очень сложный способ сказать node.html (node.text()); согласно моему ответу. –

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