2016-01-08 7 views
3

У меня есть некоторые HTML, который выглядит следующим образом:Удалить текст, который не имеет свой собственный элемент

<div class="field"> 
    <input type="text" name="name" id="sourcedidSource" value="SYSTEM">SYSTEM 
    <span class="someClass"></span> 
</div> 

Мне нужно удалить SYSTEM текст после sourcedidSource, сохраняя при этом все остальное нетронутым. Я пробовал $('.field').text().remove();, но это удаляет элементы input и span. Что мне делать?

ответ

3

Это на самом деле намного проще работать с textnodes без JQuery

var node = document.getElementById('sourcedidSource').nextSibling; 
node.parentNode.removeChild(node); 

Или фанки JQuery версия

$($('#sourcedidSource').get(0).nextSibling).remove(); 
+0

А, простота использования javascript в удобной форме. Благодаря! – Cliff

0

Вместо $('.field').text().remove();

ли $('#sourcedidSource').text('') ИЛИ $('#sourcedidSource').text().remove()

Это будет направлена ​​на конкретное поле ввода вы имеете и установить текстовое содержимое в пустую строку, ''.

+0

Обратите внимание, что это полностью перезапишет весь HTML-элемент. Кроме того, '$ ('# sourcedidSource'). Text(). Remove()' даст вам синтаксическую ошибку, так как 'text()' возвращает строку, которая не имеет метода 'remove()'. –

+0

Да, вы правы, сэр! Но я думал, что единственным содержимым рассматриваемого элемента HTML 'input' является текст, который OP хотел удалить. Ваш ответ лучше, но ;-) – AdamJeffers

2

Вы можете использовать contents() и filter() получить textNode внутри .field и remove() их. Попробуйте это:

$('.field').contents().filter(function() { 
    return this.nodeType == 3; 
}).remove(); 

Example fiddle

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