我需要选择元素的可读文本的第一位。
<li>
Hello world
</li>
和
<li>Hello world</li>
应为“Hello world”
<li>
<span>Hello Jupiter</span>
What's up?
</li>
应该是'Hello Jupiter'
我遇到空白问题,所以
function getTextFromFirstChild(el) {
return $(el).contents().first().text();
}
将返回一个lf但没有别的(毕竟它是第一个文本节点)
答案 0 :(得分:3)
function getTextFromFirstChild(el) {
return $(el).contents(":not(:empty)").first().text();
}
似乎可以解决这个问题
答案 1 :(得分:0)
我会这样做:
function getTextFromFirstChild(el) {
var result;
$(el).contents().each(function() {
if( result = $.trim( $(this).text() ) ) {
return false;
}
});
return result;
}
循环内容,修剪文本内容中的空白区域。如果修剪后的内容给出了真实的结果,它将触发return false;
打破循环,并返回结果。
答案 2 :(得分:0)
我认为实现这一目标的最佳方法是使用递归:
function getTextFromFirstChild(el) {
var ch = $(el).children();
if (ch.length < 1) return $(el).text();
alert($(el).html());
return getTextFromFirstChild(ch[0]);
}
答案 3 :(得分:0)
我会这样做:
$("selector").contents().filter(function() {
return (this.innerText) ? this.innerText.match(/\S/) : false;
}).first();
答案 4 :(得分:0)
尝试:
.contents().first().text()