Javascript 最佳处理方法;无法读取属性';增补列表器';“无效”的定义;错误

Javascript 最佳处理方法;无法读取属性';增补列表器';“无效”的定义;错误,javascript,jquery,event-handling,dom-events,Javascript,Jquery,Event Handling,Dom Events,目前我所做的是检查页面中是否存在元素,但我的代码有很多if条件。当元素不存在时,Jquery事件侦听器不会显示错误。jQuery如何处理这个问题?我可以使用哪些技术来进行更好的设计 var el = document.getElementById('el'); var another_el = document.getElementById('another_el'); if(another_el){ el.addEventListener('click', swapper, false);

目前我所做的是检查页面中是否存在元素,但我的代码有很多if条件。当元素不存在时,Jquery事件侦听器不会显示错误。jQuery如何处理这个问题?我可以使用哪些技术来进行更好的设计

var el = document.getElementById('el');
var another_el = document.getElementById('another_el');

if(another_el){
el.addEventListener('click', swapper, false);
}

if(el){
  el.addEventListener('click', swapper, false);
}
....
...
jquery是如何处理的

jQuery的API是基于集合的,而不是基于元素的。DOM的API是基于元素的。当您在jQuery中执行
$(“#foo”).on(“click”、…)
时,如果没有id为
“foo”
的元素,
$()
将返回一个空集,而不是
null
,并且对该集合调用
不会做任何事情,但也不会导致错误

由于
getElementById
返回一个元素或
null
,因此必须进行所显示的检查,以防止尝试调用
null
上的方法,从而导致错误

如果您希望在不使用jQuery的情况下获得基于集合的API的好处,您可以编写自己的实用程序函数集,使用
querySelectorAll
为自己提供一个围绕DOM API的基于集合的精简包装器(如果您愿意)

下面是一个非常简单的入门示例:

//我们用作`domSet返回的对象原型的对象`
var domSetMethods={
on:函数(事件名称、处理程序){
//循环此集合中的元素,添加处理程序
this.elements.forEach(函数(元素){
元素addEventListener(事件名称,处理程序);
});
//要支持链接,请返回'this'`
归还这个;
}
};
//获取给定选择器的“DOM集”
函数集(选择器){
//创建集合,使用`domSetMethods`作为其原型
var set=Object.create(domSetMethods);
//添加元素
set.elements=Array.prototype.slice.call(document.querySelectorAll(选择器));
//还它
返回集;
}
domSet(#foo”)。在(“单击”,函数()上{
console.log(“foo clicked”);
});
//请注意,即使没有id=“bar”元素,也不会出现错误
domSet(“#条”)。在(“单击”,函数()上){
console.log(“点击条”);
});
foo元素(没有条形元素)
jquery是如何处理的

jQuery的API是基于集合的,而不是基于元素的。DOM的API是基于元素的。当您在jQuery中执行
$(“#foo”).on(“click”、…)
时,如果没有id为
“foo”
的元素,
$()
将返回一个空集,而不是
null
,并且对该集合调用
不会做任何事情,但也不会导致错误

由于
getElementById
返回一个元素或
null
,因此必须进行所显示的检查,以防止尝试调用
null
上的方法,从而导致错误

如果您希望在不使用jQuery的情况下获得基于集合的API的好处,您可以编写自己的实用程序函数集,使用
querySelectorAll
为自己提供一个围绕DOM API的基于集合的精简包装器(如果您愿意)

下面是一个非常简单的入门示例:

//我们用作`domSet返回的对象原型的对象`
var domSetMethods={
on:函数(事件名称、处理程序){
//循环此集合中的元素,添加处理程序
this.elements.forEach(函数(元素){
元素addEventListener(事件名称,处理程序);
});
//要支持链接,请返回'this'`
归还这个;
}
};
//获取给定选择器的“DOM集”
函数集(选择器){
//创建集合,使用`domSetMethods`作为其原型
var set=Object.create(domSetMethods);
//添加元素
set.elements=Array.prototype.slice.call(document.querySelectorAll(选择器));
//还它
返回集;
}
domSet(#foo”)。在(“单击”,函数()上{
console.log(“foo clicked”);
});
//请注意,即使没有id=“bar”元素,也不会出现错误
domSet(“#条”)。在(“单击”,函数()上){
console.log(“点击条”);
});

foo元素(没有条形元素)
beautifuly@T.J.beautifuly@T.J。