2010-08-12 2 views
4

Я хотел бы вернуть значение узла ячейки таблицы. Однако метод text() сбрасывает все дерево DOM и возвращает строку всех вложенных узлов (ячейка таблицы может содержать текст и html). Как только я извлечу строку узла, я хотел бы изменить его и записать обратно на узел. Измененный текст состоит из текста и html.Текст возвращаемого узла (нерекурсивный)

Есть ли какой-либо метод jquery (или, может быть, Javascript), который может быть использован для получения текста (без перехода к дочерним элементам) и другой функции, которую я могу использовать для записи текста + html (plain text() и html() не будут работать в этом случае, поскольку они будут переопределять дочерние узлы)?

Приветствия, Max

+1

Можете ли вы дать некоторый пример разметки до и после того, как скрипт работает? – prodigitalson

ответ

4

Чтобы получить текст из дочерних текстовых узлов, вы можете сделать это:

var text = $('selector').contents().map(function() { 
     // If it is a textNode, return its nodeValue 
    if(this.nodeType == 3) return this.nodeValue; 
}).get().join('');​​​​​​ 

Я не знаю точно, что вы хотите сделать с текстом, но если вы хотите обработать его, как вы идете и заменить его новым текстом/html, вы должны сделать .each() вместо этого и использовать .replaceWith().

$('selector').contents().each(function() { 
    if(this.nodeType == 3) { 
     // do something with the text 
     $(this).replaceWith('new processed value'); 
    } 
});​​​​​​ 

Вот пример:http://jsfiddle.net/ZNjCW/

+0

Отлично работает. Именно то, что я искал ... Было бы хорошо, если бы это было как часть jquery. – Max

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