$(function(){
var text = $('li').map(function(){
return $(this).contents().map(function(){
return this.nodeType==3 ? this.nodeValue : "";
}).get().join('');
}).get().join(' ');
console.log(text);
// AI AII
//
// A B C III
});
Метод contents()
предоставляет вам как текстовые, так и дочерние узлы.Текстовые узлы имеют nodeType
из 3
.Для менее функционального кода в стиле попробуйте следующее:
$(function(){
$('li').each(function(){
$(this).contents().each(function(){
if (this.nodeType==3){
console.log(this.nodeValue.replace(/^\s+|\s+$/g,''));
}
});
});
// AI
// AII
//
// A
// B
// C
// III
});
Обратите внимание, что из-за разметки все еще есть пустой текстовый узел.