jQuery-удалить развернутый текст, но сохранить элементы?


Итак, вот код:

<parent><child>i want to keep the child</child>Some text I want to remove</parent>

Я хотел бы изменить его следующим образом:

<parent><child>i want to keep the child</child></parent>
Я вижу много людей, которые спрашивают, Как удалить дочерний элемент и сохранить развернутый текст, но не наоборот. Как вы нацеливаетесь на то,что не названо?
4 3

4 ответа:

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

var child = $('parent').children('child');

$('parent').html(child);

Скрипка: http://jsfiddle.net/maniator/t2CDk/

Если вы сделаете это, вы потеряете любые event listeners и данные из элементов.

Вы можете сделать это старомодным способом javascript, и протестировать каждый узел для nodeType 3, а затем сделать removeChild на нем. Это было бы довольно чисто и быстро (минимальный jQuery), и не испортило бы никаких слушателей событий.

var parent = $('parent')[0];  // Get reference to DOM

for( var i = 0; i < parent.childNodes.length; i++ ) {
  var current_child = parent.childNodes[i];
  if( current_child.nodeType == 3 )
    parent.removeChild( current_child );
}

Я модифицировал ответ Нилса, чтобы он работал для нескольких элементов:

$( elements ).each(function() {  
var child = $(this).children();  
$(this).html(child);   
});

Очень просто просто используйте этот код:

jQuery(function($){

    // Replace 'td' with your html tag
    $("td").html(function() { 

    // Replace 'ok' with string you want to change, you can delete 'hello everyone' to remove the text
          return $(this).html().replace("ok", "hello everyone");  

    });
});

Вот полный пример: https://blog.hfarazm.com/remove-unwrapped-text-jquery/