2015-12-05 3 views
0

JQuery text() метод не работает на textNodes:JQuery текст() метод не работает на textnodes

$('div').contents().filter(function(){ 
 
    return this.nodeType === 3; 
 
}).text("new text");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div> 
 
    textNode text doesn't change 
 
</div>

Мой вопрос , что может быть причиной этого?

Это что касается текстовых узлов withhespace, которые трудно обрабатывать? И/или более глубокие текстовые узлы уровня потомков, чем только дочерние?

Я не спрашиваю, как изменить его, я знаю, обходные пути, но почему JQtext() метод не поддерживает текстовые узлы? Я ожидал бы, используя этот метод, на любом текстовом узле, который сможет изменить значение своего узла.

Я вполне уверен, что для этого есть веская причина, я не могу просто получить ее.

ответ

1

что может быть причиной этого?

Потому что это не то, что нужно сделать text. От the docs:

... установить текстовое содержимое совпавших элементов

(курсив мой)

Почему он не предназначен, чтобы сделать это вопрос для Джона Ресига и/или текущего набора поддерживающих jQuery, но при угадывании, если он обрабатывает текстовые узлы, а также элементы, это усложнит метод. Он должен был бы проверить nodeType и установить nodeValue, если это был текстовый узел, или делать то, что он сейчас делает (я не знаю, делают ли они innerText/textContent или добавляют текстовый узел, возможно, первый) для элемента.

Большая часть jQuery является элементной, игнорируя другие узлы. contents - один из немногих методов, которые работают на уровне узлов.

+0

Не просто проверить в 'text()' метод для nodetype textNode, а затем использовать 'nodeValue', чтобы задать текст достаточно простым? –

+0

@ A.Wolff: Да. Это усложняет метод. –

+0

Хорошо, я думаю, что это главная причина, по которой 'jQuery - это элемент-центричный'. Это просто «странно», чем метод «text()» не работает над текстом. –

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