只是想知道,我能做些什么来检查div之后是否存在任何东西。 在此示例中,在这种情况下应返回 True :
在这种情况下,应该返回错误:
我尝试使用$('#text')。next()。length,但不工作。特别为第一个例子。
答案 0 :(得分:2)
不确定是否存在更短的方式:
var text = $("#text"),
hasNext = !!(text.next().length || (text[0].nextSibling && $.trim(text[0].nextSibling.nodeValue)));
基本上我们首先检查是否有任何使用next()
的元素节点(所以,<br/>
或其他元素),如果有,那就足够了。否则,我们检查是否有任何nextSibling
对象,并且它是否具有非空字符串的值(因此不考虑任何空格)。
答案 1 :(得分:1)
是的,您可以将DOM用于此
alert($('div#text').is(':not(:last)') || $.trim($('div#text')[0].nextSibling.nodeValue).length > 0);
在第三种情况下返回false:
答案 2 :(得分:1)
看看this demo。我将所有三个案例合二为一。代码是这样的:
var $contents = $(this).contents().filter(function() {
// modify the following line to indicate what recon as "something"
return (this.nodeType == 1 || this.nodeType == 3) && /\S/.test(this.nodeValue);
});
var $text = $(this).find(".text:first");
if (console && console.log) {
console.log($contents, $contents.index($text), $contents.length);
}
if ($contents.index($text) == $contents.length - 1) {
$(this).css({
background: "#F99"
});
}
else {
$(this).css({
background: "#9F9"
});
}
此代码执行以下操作:
答案 3 :(得分:0)
这是因为jquery没有提供获取文本节点的便捷方法。您可以使用容器.contents()确实返回文本节点,然后遍历它以查看有问题的div之后的内容。要查看节点是否为文本节点,它具有nodeType == 3。