Ответ 1
Используя ответ этот вопрос:
$(elem)
.contents()
.filter(function() {
return this.nodeType == 3; //Node.TEXT_NODE
}).remove();
Есть ли способ удалить текст, который не завернут в любой тег, используя jQuery
<p>This is some text</p>
This is "unwrapped" text //to be removed
<span>some more text</span>
Спасибо за помощь
Используя ответ этот вопрос:
$(elem)
.contents()
.filter(function() {
return this.nodeType == 3; //Node.TEXT_NODE
}).remove();
Во-первых, вы можете обернуть их фиктивными промежутками:
$("body").contents()
.filter(function(){ return this.nodeType != 1; })
.wrap("<span class='orphan'/>");
Теперь вы можете легко их удалить:
$('span.orphan').remove();
FWIW..
<div class="parent-element">
<p>This is some text</p>
This is "unwrapped" text //to be removed
<span>some more text</span>
</div>
через CSS:
.parent-element { font-size: 0px; }
.parent-element p { font-size: 12px; }
.parent-element span { font-size: 14px; }
Обтекание этого элемента DOM означает, что jQuery может найти его:
например:
var text = 'This is "unwrapped" text';
$("div:contains('" + text + "')").remove();
или просто:
$('p').next().remove();
Это потрясающе, но в то же время следующий код не работает
$("div.myClass:has(img)").contents().filter(":text").remove();
и код из первого сообщения работает
$("div.myClass:has(img)")
.contents()
.filter(function() {
return this.nodeType == 3; //Node.TEXT_NODE
}).remove();
Важно помнить! jQuery 1.8.3.
И прежде всего я помню, что манипуляция innerHTML работает намного быстрее, чем этот подход!