JQuery - установка текста элемента без удаления другого элемента (привязка)
У меня есть такой элемент:
<td>
<a>anchor</a>
[ some text ]
</td>
И мне нужно установить его текст в jQuery, не удаляя якорь.
Содержимое элемента может отличаться по порядку (текст до или после), а фактический текст неизвестен.
Спасибо
Новое обновление
Это то, что я придумал, предполагает только один текст node:
function setTextContents($elem, text) {
$elem.contents().filter(function() {
if (this.nodeType == Node.TEXT_NODE) {
this.nodeValue = text;
}
});
}
setTextContents( $('td'), "new text");
Ответы
Ответ 1
Neal answer - мое предложение. jQuery не имеет способа выбрать текстовые узлы Как выбрать текстовые узлы с помощью jQuery?.
Изменение структуры HTML приведет к простейшему коду. Если вы не можете этого сделать, вы можете просто использовать свойство childNodes для поиска узлов типа 3 (TEXT_NODE)
Вот пример кода, который принимает последний node, это node, который вы хотите отредактировать
http://jsfiddle.net/mendesjuan/B7rKs/
<div class='someClass'>
<a>anchor</a>
[ some text ]
</div>
<button id='btn'> Change text </button>
$('#btn').click(function(){
$('.someClass').get(0).lastChild.nodeValue = "New Value"
});
Ответ 2
Если текст можно поместить в диапазон:
<td id='someID'>
<a>anchor</a>
<span>[ some text ]</span>
</td>
Вы можете сделать:
$('td#someID span').text('new text')
Ответ 3
Без изменения разметки:
Live Demo
var anchor = $('td').find('a').clone();
$('td').text('{ some other text }').prepend(anchor);