Подтвердить что ты не робот

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");
4b9b3361

Ответ 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);