只是想知道,我可以做些什么来检查 div 之后是否存在任何东西。在这个例子中,在这种情况下应该返回True:
在这种情况下应该返回False:
我尝试使用 $('#text').next().length ,但不起作用。第一个示例特别。
只是想知道,我可以做些什么来检查 div 之后是否存在任何东西。在这个例子中,在这种情况下应该返回True:
在这种情况下应该返回False:
我尝试使用 $('#text').next().length ,但不起作用。第一个示例特别。
但是,不确定是否存在更短的方式:
var text = $("#text"),
hasNext = !!(text.next().length || (text[0].nextSibling && $.trim(text[0].nextSibling.nodeValue)));
基本上我们首先检查是否有任何元素节点使用next()
(so,<br/>
或其他元素),如果有,那就足够了。否则,我们检查是否有任何nextSibling
对象,以及它的值是否不是空字符串(因此不考虑任何空格)。
是的,您可以为此使用 DOM
alert($('div#text').is(':not(:last)') || $.trim($('div#text')[0].nextSibling.nodeValue).length > 0);
在您的第三种情况下返回 false:
看看这个演示。我将所有三个案例合二为一。代码是这样的:
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"
});
}
此代码执行以下操作:
这是因为 jquery 没有提供获取文本节点的便捷方式。您可以使用容器 .contents() 它确实返回文本节点,然后循环通过它来查看有问题的 div 之后有什么。要查看一个节点是否是一个文本节点,它的 nodeType == 3。