1

假设我有以下 HTML 和 Javascript。在这里,页面上只有 1 个 div,但在任何给定时间,总共可能有 2 个 div(动态插入)。

在 jQuery 中,您是否应该先测试某个元素是否存在,然后再对它进行任何操作,尤其是如果您知道它可能不存在?

我应该用 测试它if (('#div2).length > 0)吗?

还是我应该让 jQuery 弄清楚?我知道如果不存在,jQuery 足够聪明,可以知道元素不存在,所以它不会对它做任何事情,也不会抛出错误。但是最好先测试一下它是否存在?最佳实践可能还是有性能差异?

HTML:

<div id="div1"></div>

Javascript:

$('#div1').text('Hello World!');

/*
  Should I first test and see if this div exists?
  With if (('#div2').length > 0)
  Or leave it as is and let jQuery handle it
*/
$('#div2').text('Should I have first tested to see if this div existed?');
4

2 回答 2

0

我相信您可能不应该在不存在的元素上执行代码。话虽如此,我无法想象在没有匹配元素的选择器上执行操作会产生任何实际问题。所以应该不需要测试它。

jQuery 循环遍历所有匹配的元素以执行操作,所以如果它不匹配任何元素,它将只循环任何内容。除了非常非常小的潜在性能提升之外,我看不出你会获得什么。

“过早的优化是万恶之源。” ——唐纳德·克努斯

于 2013-02-17T06:26:21.740 回答
0

jQuery 的工厂函数返回的对象是类数组。选定的 DOM 元素将设置为数字索引 ( {0: elem1, 1:elem2, etc})。length 属性将设置为匹配元素的数量。

jQuery 的所有方法都设计为遍历元素集合以执行操作。这基本上意味着obj.test('foo')相当于:

for (i = 0; i < obj.length; i++) {
    obj[i].textContent = 'foo';
}

如果集合中没有元素,则方法不会执行任何操作,因为迭代器从不迭代。

因此,tl;dr,很少有理由在对选择执行操作之前检查选择是否包含元素。

于 2013-02-17T06:28:59.787 回答