我正在尝试找到一个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%');
}
答案 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,取决于您的需要