jQuery выберите текстовые узлы и удалите их содержимое
Я искал ответ на этот вопрос, и я придумал это
stackoverflow-Как выбрать текстовые узлы с помощью jQuery?
там до сих пор другой способ сделать это ?? В моем случае я пытаюсь найти каждый текстовый узел, начиная с данного элемента DOM и
empty()
его. Есть предложения ?
UPDATE-после небольшого беспорядка я придумал это jsFiddle
функции выбирает каждый текстовый узел, но вместо того, чтобы заменять только пустые с новым значением, он заменяет их все. Что я делаю не так ??5 ответов
Как я понял, я думаю, что это то, что вы ищете:
$('.example').each(function(){
console.log($(this).contents());
$(this).contents().filter(function(){
if( this.nodeType === 1 && this.childElementCount == 0 && this.textContent == ''){
this.textContent = 'new value';
}
});
});
вы можете проверить скрипка
со ссылкой на это " теперь функция выбирает каждый текстовый узел, но вместо того, чтобы заменять только пустые с новым заданным значением, она заменяет их все. Что я делаю не так ??'
требуется, чтобы просто проверить nodeValue для пробелов с помощью регулярного выражения, а затем на основе этого продолжить вперед.
я обновил его, как это, и это работает штраф в размере http://jsfiddle.net/Vj5LR/2/
$(document).ready(function(){
var prova = ['1','2','3','4','5','6'];
var regForNonWhiteSpace = /\S/; // non white space
$('.example').find('*').each(function(){
$(this).contents().filter(function(){
//this.trim();
if( this.nodeType === 3 && !regForNonWhiteSpace.test(this.nodeValue)){
this.nodeValue = 'new value'; // only when there is no content at all
}
});
});
});
надеюсь, это решит проблема
empty()
используется для очистки innerText
элемента и не применяется к textNodes. Вместо этого вам нужно использовать remove()
:
$('.example')
.contents()
.filter(function () {
return this.nodeType === 3; //Node.TEXT_NODE
}).remove();
$(document).ready(function(){
var prova = ['1','2','3','4','5','6'];
$('.example').find('*').each(function(){
$(this).contents().filter(function(){
//this.trim();
if( this.nodeType === 3 && this.nodeValue.trim().length === 0){
this.nodeValue = 'new value';
}
});
});
});
Как насчет этой демонстрации http://jsfiddle.net/RajB4/42/
if( this.nodeType === 3 && this.nodeValue.trim().length != 0){
this.nodeValue = 'new value';
}