Jquery最佳实践,在附加事件之前检查按钮/链接是否存在
我有一个带有按钮和链接的网页,这些按钮和链接可能存在,也可能不存在。 我有一个jQuery,它运行并为这些按钮和链接分配Jquery最佳实践,在附加事件之前检查按钮/链接是否存在,jquery,Jquery,我有一个带有按钮和链接的网页,这些按钮和链接可能存在,也可能不存在。 我有一个jQuery,它运行并为这些按钮和链接分配click事件 在我尝试附加单击或任何其他事件之前,不检查按钮或链接的存在是否是一种不良做法?后果如何 如果我应该检查按钮和链接是否存在,那么什么技术是最佳实践? 像这样检查长度-$('myButton')。长度!=0或其他方式?完全不需要提前检查,除非您需要在不存在的情况下执行其他操作 让我们假设您可能有一个带有id值“myButton”的按钮,也可能没有。如果您这样做: $
click
事件
在我尝试附加单击
或任何其他事件之前,不检查按钮或链接的存在是否是一种不良做法?后果如何
如果我应该检查按钮和链接是否存在,那么什么技术是最佳实践?
像这样检查长度-
$('myButton')。长度!=0
或其他方式?完全不需要提前检查,除非您需要在不存在的情况下执行其他操作
让我们假设您可能有一个带有id
值“myButton”
的按钮,也可能没有。如果您这样做:
$("#myButton").click(function() { /* ..... */ });
…而且按钮不存在,没有连接处理程序。这实际上是禁止的
另一种方法是:
var btn = $("#myButton");
if (btn.length !== 0) {
btn.click(function() { /* ... */ });
}
…这不会为您节省任何东西(您仍然需要在DOM中查找),但会涉及更多代码
这是jQuery“集合论”方法的一大优点:如果集合是空的,那么集合上的操作不会失败,它们什么都不做。除非你需要做一些不同的事情,否则绝对不需要提前检查 让我们假设您可能有一个带有
id
值“myButton”
的按钮,也可能没有。如果您这样做:
$("#myButton").click(function() { /* ..... */ });
…而且按钮不存在,没有连接处理程序。这实际上是禁止的
另一种方法是:
var btn = $("#myButton");
if (btn.length !== 0) {
btn.click(function() { /* ... */ });
}
…这不会为您节省任何东西(您仍然需要在DOM中查找),但会涉及更多代码
这是jQuery“集合论”方法的一大优点:如果集合是空的,那么对集合的操作不会失败,它们什么也不做。对不包含元素的jQuery对象调用jQuery函数不会产生任何影响,因为jQuery已经隐式地为您处理了这一点。本质上,它依次迭代每个匹配的元素,并尝试迭代初始化但为空的集合,只会导致不执行任何操作。对不包含元素的jQuery对象调用jQuery函数不会产生任何影响,因为jQuery已经隐式地为您处理了这个问题。它基本上依次迭代每个匹配的元素,并尝试迭代初始化但为空的集合,只会导致不执行任何操作。无需检查按钮是否存在。
如果“#myButton”不存在,$(“#myButton”)。单击(…)不会附加任何内容,这是一种不错的做法。无需检查按钮是否存在。 如果“#myButton”不存在,$('#myButton')。单击(…)不会附加任何内容,这是一种不错的做法。
$('myButton')
是通过DOM进行搜索。定义不当的搜索条件和过重的DOM可能会导致昂贵的搜索操作
一些开发人员忘记了这一点,对同一个搜索查询执行多个操作,例如
if ($('myButton').length !== 0) {
$('myButton').click(...);
}
如果$('mybutton')
返回一个或多个结果,则上面的搜索将运行两次
您当然可以对此进行“优化”以
但是,通过注意jquery将愉快地接受空集上的操作,这一点可以得到更大的改进:
$('myButton').click(...);
jquery足够聪明,可以运行搜索,注意它返回了空集,然后忽略。单击()
简而言之,不需要首先检查按钮是否存在。$('myButton')
是通过DOM进行的搜索。定义不当的搜索条件和过重的DOM可能会导致昂贵的搜索操作
一些开发人员忘记了这一点,对同一个搜索查询执行多个操作,例如
if ($('myButton').length !== 0) {
$('myButton').click(...);
}
如果$('mybutton')
返回一个或多个结果,则上面的搜索将运行两次
您当然可以对此进行“优化”以
但是,通过注意jquery将愉快地接受空集上的操作,这一点可以得到更大的改进:
$('myButton').click(...);
jquery足够聪明,可以运行搜索,注意它返回了空集,然后忽略。单击()
简而言之,没有必要先检查按钮是否存在。jQuery已经为您做了这件事,您不必检查jQuery已经为您做了这件事,您不必检查这可能不是问题的答案,而且不相关,因为您可以一次性执行选择并将结果jQuery对象存储在变量中。@AnthonyGrist-感谢您的评论,我已经更新了我的答案。这可能不是问题的答案,由于您可以一次性执行选择并将结果jQuery对象存储在变量中,因此不相关。@AnthonyGrist-感谢您的评论,我已经更新了我的答案。
$('.parentthatdoesist')。on('click,'myButton',function(){})
将处理以后添加按钮时的单击操作。如果您有多个按钮,它的效率也会更高。$('.parentThatDoesExist')。on('click,'myButton',function(){})
将处理稍后添加按钮时的单击操作。如果你有多个按钮,它的效率也会更高。