0

我正在尝试确定 jQuery 选择器的结果(通过遍历 DOM)是否确实找到了 DOM 元素,但我遇到了一些问题。我认为通过检查变量是否等于undefinednull在这种情况下可以工作,但它不适合我。我觉得我在这里缺少一些基本的东西。任何帮助表示赞赏。

这是我的例子。

jsFiddle

HTML

<ul>
    <li>

    </li>
</ul>

<div id="results"></div>

Javascript/jQuery

var
    $element = $("ul li"),
    $parent = $element.parent().closest("li"),//this is the selector that is giving me the issue
    $r = $("#results")//just used to append the results of the if statement below
    ;

$r.append("<br />$parent = " + $parent);
$r.append("<br />typeof $parent = " + typeof $parent);
$r.append("<br />$parent.length = " + $parent.length);
$r.append("<br />$parent[0] = " + $parent[0] + "<br />");//for Chrome

if ($parent === "null") { $r.append("<br />$parent === 'null'") }//not expected to work, just testing
if ($parent === null) { $r.append("<br />$parent === null") }//not expected to work, just testing
if ($parent == null) { $r.append("<br />$parent == null") }//not expected to work, just testing

if ($parent === "undefined") { $r.append("<br />$parent === 'undefined'") }
if ($parent === undefined) { $r.append("<br />$parent === undefined") }
if ($parent == undefined) { $r.append("<br />$parent == undefined") }

if ($parent[0] === "undefined") { $r.append("<br />$parent[0] === 'undefined'") }
if ($parent[0] === undefined) { $r.append("<br />$parent[0] === undefined") }
if ($parent[0] == undefined) { $r.append("<br />$parent[0] == undefined") }

if (typeof $parent === "undefined") { $r.append("<br />typeof $parent === 'undefined'") }
if (typeof $parent === undefined) { $r.append("<br />typeof $parent === undefined") }
if (typeof $parent == undefined) { $r.append("<br />typeof $parent == undefined") }


if (typeof $parent[0] === "undefined") { $r.append("<br />typeof $parent[0] === 'undefined'") }
if (typeof $parent[0] === undefined) { $r.append("<br />typeof $parent[0] === undefined") }
if (typeof $parent[0] == undefined) { $r.append("<br />typeof $parent[0] == undefined") }

if ($parent.length == 0) { $r.append("<br />$parent.length == 0") }

jsFiddle

这些返回true$parent[0] === undefined$parent[0] == undefinedtypeof $parent[0] === 'undefined';

这是有道理的,因为 jQuery 选择器没有找到任何 DOM 对象并且没有元素[0]。我只尝试过这个,因为console.log在 Chrome 中使用对象需要这个。但我不认为这是正确的。

$parent.length == 0按预期工作。但是这需要一个!== undefined' and!== null` 吗?

提前致谢!

4

1 回答 1

1

如果选择器或遍历导致零匹配元素,length则 jQuery 对象的属性将等于0. 检查元素是否匹配的标准——也是唯一必要的——方法是:

jQueryObject.length === 0

所有选择元素的 jQuery 函数本身都会返回一个 jQuery 对象(其中包含匹配的元素),因此它的结果不可能是nullor undefined。它将始终返回一个对象,并且该对象将始终具有一个length属性。

查看您的具体示例:

var $element = $("ul li"),
    $parent = $element.parent().closest("li")

如果代码执行时<li>元素内没有元素,则将是一个空的 jQuery 对象(一个属性等于的 jQuery 对象)。调用将依次返回一个空的 jQuery 对象,然后调用也将返回一个空的 jQuery 对象。<ul>$elementlength0$element.parent().closest('li')

现在,假设代码执行时<li>元素内部有元素;<ul>在这种情况下,$element将是一个非空的 jQuery 对象。它们都有一个父对象,因此调用$parent将返回一个包含一些元素的 jQuery 对象。但是,如果这些元素<li>与文档之间没有元素,.closest('li')则将返回一个空的 jQuery 对象。

于 2013-02-01T16:19:21.760 回答