当元素不存在时,如何避免“无法读取属性”错误?

时间:2018-03-13 13:20:42

标签: javascript jquery if-statement

这是我的代码:

category = $(document).find(".chosen-single:not(.chosen-default)  > span:first-child")[0].outerHTML

有时会抛出:

  

未捕获的TypeError:无法读取未定义的属性“outerHTML”

我应该采取什么样的条件?

5 个答案:

答案 0 :(得分:1)

一个很好的技巧是使用匿名函数,像这样,将查询作为参数传递

dropMimeData

它将为您节省设置额外变量和if / then / else语句。

答案 1 :(得分:0)

让您的代码看起来像这样:

var element = $(document).find(".chosen-single:not(.chosen-default)  > span:first-child")[0];

if(element) {
   category = element.outerHTML
}

它似乎有时候你正在搜索的元素缺失,所以结果是未定义的,为了避免这个问题,检查是否找到你要查询的内容

答案 2 :(得分:0)

检查本机DOM元素或检查jQuery对象的长度:

var obj = $(document).find(".chosen-single:not(.chosen-default)  > span:first-child")[0];
var category = "";

if (obj) category = obj.outerHTML;

检查长度:

var $obj = $(document).find(".chosen-single:not(.chosen-default)  > span:first-child");
var category = "";

if ($obj.length) category = obj.outerHTML;

答案 3 :(得分:0)

只需将元素存储在变量中,然后在访问之前进行检查:

var $chosenItem = $(document).find(".chosen-single:not(.chosen-default)  > span:first-child")[0];
category = $chosenItem && $chosenItem.outerHTML;

或者用您选择的条件替代。

答案 4 :(得分:0)

创建一个计算该特定类的元素数量的变量,然后创建一个if语句。

例如:

   var chosenClass = document.querySelectorAll('.chosen-single').length;
   if(chosenClass == 0) {
      null;
   }
     else {   
     }