5

我正在尝试在元素“”中查找 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

4 回答 4

9

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

0检查长度,如果集合中没有元素,它将是:

if (alreadyExistingResourceKeyNameTextBox.length ...
于 2013-10-07T11:30:44.823 回答
3

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 都可以正常工作。这在大多数情况下是有益的,您只需对匹配的元素应用一些更改,而不管是否有任何更改。如果这些元素的存在对您的业务逻辑至关重要,您应该手动检查它。

于 2013-10-07T11:44:34.763 回答
2

你应该alreadyExistingResourceKeyNameTextBox.length != 0改用我认为

于 2013-10-07T11:32:13.753 回答
1

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

于 2013-10-07T11:32:22.307 回答