即使DOM中没有匹配的子元素,jQuery.find()也会返回一个对象

时间:2013-10-07 11:29:19

标签: javascript jquery

我正在尝试找到一个ID为元素''的元素,因此是它的子元素。

我使用$ .find方法执行搜索。

如果找到了子对象,我想执行一些操作,如果找不到子对象,我想做不同的事情。

然而,即使我知道没有这样的子元素存在,jQuery.find方法报告一个我不确定的对象,从Watches窗口检查它是什么。

以下是相关的代码段:

function CreateResourceKeyTextBox(resourceKeyId, editMode) {
    var resourceKeyTableCell = $("#tdKeyResourceKeyId" + resourceKeyId);

    var resourceKeyNameTextBox = null;

    var alreadyExistingResourceKeyNameTextBox = resourceKeyTableCell.find('#txtResourceKeyName' + resourceKeyId);

    if (alreadyExistingResourceKeyNameTextBox != null && typeof alreadyExistingResourceKeyNameTextBox != "undefined") {
        resourceKeyTableCell.html('');
        resourceKeyNameTextBox = alreadyExistingResourceKeyNameTextBox;
        resourceKeyNameTextBox.css('display', 'block');
        resourceKeyNameTextBox.appendTo('#tdKeyResourceKeyId' + resourceKeyId);
        resourceKeyNameTextBox.css('width', '96%');
    }

4 个答案:

答案 0 :(得分:7)

jQuery查询函数总是返回一个对象,即使没有匹配的DOM元素。

检查长度,如果集合中没有元素,则为0

if (alreadyExistingResourceKeyNameTextBox.length ...

答案 1 :(得分:2)

您应该使用alreadyExistingResourceKeyNameTextBox.length != 0代替

答案 2 :(得分:2)

jquery的find方法返回一个jquery对象,其内部匹配元素是css选择器的对应元素。

如果css选择器无法匹配任何元素,那么,jquery的find方法的返回对象的内部匹配元素是一个空数组。您可以使用.get方法获取内部匹配元素,如下所示:

var elems = $.find(css_selector).get()

此方法返回DOM元素数组而不是jquery对象实例,您可以使用以下语法检查空数组

var elems = $.find(css_selector).get()
if(elems.length === 0){
    //array is empty
}else{
    //array is not empty

}

jquery的这种行为可以最大限度地减少您可能遇到的任何语法错误,无论您的css选择器是否匹配任何DOM元素,jquery都可以正常工作。在大多数情况下,这是有益的,您只需对匹配的元素应用一些更改,无论有什么。如果这些元素的存在对您的业务逻辑至关重要,您应该手动检查它。

答案 3 :(得分:1)

如果使用jquery .find()方法找不到对象,它总是返回一个空数组。如果你得到的不是其他任何东西,你需要检查你的DOM。你总是可以检查结果的长度,即result.length> 0 || result.length === 1,取决于您的需要