我正在使用一个脚本来使所有输入在浏览器中都有一个占位符,但还不支持该功能。
在该脚本中我正在使用
$('input[placeholder]').each(function() {
选择要处理的所有元素。
我想知道这可能会慢,因为它不是一个非常具体的选择,如
$('#input').each(function() {
我知道选择方式更快(但我不想单独指定所有id)。
您是否建议使用占位符属性向所有输入添加类,如下所示:
$('.iHaveaPlaceholder').each(function() {
使选择更快(我认为按类选择比通过属性更快)。但是这会误用css类的目的只意味着风格,它会填满dom。
您是否有任何改进这些任务的建议或技巧?
答案 0 :(得分:3)
我继续做了JSPerf,用于将选择器input[placeholder]
,.hasPlaceholder
和input
与.filter()
进行比较。
现在我们要考虑一些数字,让我们谈谈你想知道的原因。
您何时搜索'input[placeholder]'
?希望只有一次。如果您在现代浏览器中执行这些选择器中的任何一个,它们将非常快速(数字是每秒操作数....)。但是,如果您知道只在不支持占位符的浏览器上运行此选择器,则列出的三种方法中,.hasPlacehoder
实际上是IE 6中最慢的,自定义过滤器获胜。您希望尝试在此代码实际影响的浏览器中测试性能。
随意添加您自己的选择器,甚至更接近您的确切HTML到该页面并征求一些浏览器测试!
编辑:我在比赛中添加input.hasPlaceholder
新的比赛......
答案 1 :(得分:2)
除非你有一个庞大的DOM,否则我认为性能差异不应该发挥作用。为了“优化”而设置了很多类,就像你说的那样,会混淆你文档的逻辑结构。
按类选择而不提供上下文仍然会导致遍历整个DOM。我认为按元素选择也是如此。在这里使用占位符类绝对不是答案。你想要做的是找到具有特定属性的所有输入元素 - 并且你正在为此目的使用正确的选择器。
答案 2 :(得分:0)
好吧,你可以给你的表单一个id,然后使用$("#theForm input[placeholder]")
,这将减少选择器必须考虑的元素数量。
答案 3 :(得分:0)
这不慢(你测试过或只是推测?)。 但是如果是,请使用类。