在 jQuery 中使用 .css 属性
Code 1
jQuery("ul#leftmenuacc").find("span.leftmenutextspan")[0].css('color', 'red');
上面的代码不起作用,所以我不得不用另一种方式来做[下面提到的]
Code 2
jQuery("ul#leftmenuacc").find('span.leftmenutextspan').each(function(index){ if(index ==0) jQuery(this).css('color', 'red') });
我在这里很困惑为什么代码 1
有效吗?我从 Jquery Docs 阅读了关于 .css
的文档,但无法找不到我缺少的东西。
有没有一种优雅的方法来做到这一点?因为目前我正在迭代很多没有用的 DOM 项。
Code 1
jQuery("ul#leftmenuacc").find("span.leftmenutextspan")[0].css('color', 'red');
The above code doesn't work, so I had to do it another way [ below mentioned ]
Code 2
jQuery("ul#leftmenuacc").find('span.leftmenutextspan').each(function(index){ if(index ==0) jQuery(this).css('color', 'red') });
I am confused here as why didn't the Code 1
works? I read the documentation on .css
from Jquery Docs, but couldn't find what I am missing.
Is there an elegant way to do it? Because currently I am iterating through a lot of DOM Items for no use.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
所有其他答案都提供了可行的解决方案。如果性能对您来说并非完全不重要,还应考虑以下因素:
避免使用
:eq
(或:first
,如建议的那样)一些其他答案)只要有可能,选择器。通常,jQuery 使用浏览器原生的
querySelectorAll()
DOM 遍历方法,这比 jQuery 自己解析 DOM 树要快得多。由于
:eq
和:first
是 jQuery 特定的,因此不能使用querySelectorAll()
– 因此,jQuery 不得不求助于使用相反,它自己的、慢得多的遍历引擎。对于这种情况,推荐的替代方案是使用 jQuery 的
filter()
或first()
(公平地说,它在内部映射到filter()< /代码>)方法:
引用jQuery自己关于
:first的文档
:<块引用>
因为 :first 是 jQuery 扩展而不是 CSS 规范的一部分,所以使用 :first 的查询无法利用本机 DOM querySelectorAll() 方法提供的性能提升。
要在使用 :first 选择元素时获得最佳性能,请首先使用纯 CSS 选择器选择元素,然后使用 .filter(":first")。
你能获得多少速度?嗯,在标准场景中,
.first()
的速度大约是:first
的 10 倍。在您的示例中,使用
find()
似乎是不必要的,并且出于与上述相同的原因,会减慢您的代码。这将是更好的选择:All of the other answers provide working solutions. If performance is not entirely unimportant to you, the following should be considered as well:
Refrain from using
:eq
(or:first
, as suggested in some of the other answers) selectors whenever you can.Usually, jQuery uses the browser's native
querySelectorAll()
DOM traversal method, which is considerably faster than jQuery parsing the DOM tree on its own.Since
:eq
and:first
are jQuery-specific,querySelectorAll()
cannot be used – thus, jQuery has to resort to using its own, much slower, traversal engine instead.The recommended alternative for this scenario is the use of jQuery's
filter()
orfirst()
(which, afair, internally maps tofilter()
) methods:Quote jQuery's own documentation on
:first
:How much speed do you gain? Well,
.first()
is around 10 times as fast as:first
in standard scenarios.The use of
find()
seems unnecessary in your example and slows your code for the same reason as mentioned above. This would be the better alternative:当您执行
$(selector)[0]
时,您将获得 HTMLElement,它没有css
功能。您可以使用 jQuery 将其包装起来,例如:$($(selector)[0])
,但更好的解决方案是使用:eq(0)
或:first
选择器:When you are doing
$(selector)[0]
you will get HTMLElement, which hasn't gotcss
function. You may wrap it with jQuery like:$($(selector)[0])
, but better solution is to use:eq(0)
or:first
selector:在代码 1 中,您在
ul#leftmenuacc
之后缺少双引号 ("),我会这样做
in Code 1 you are missing doublequotes (") after
ul#leftmenuacc
and I'd do it like this