【问题标题】:jQuery - How to select all elements with a set font-family applied to them?jQuery - 如何选择应用了一组字体系列的所有元素?
【发布时间】:2010-06-15 10:53:44
【问题描述】:

我需要一种方法让 jQuery 返回所有具有 css 的元素

font-family:AvantGardeITCbyBT-Bold, sans-serif;

适用于他们。

我认为这样做的唯一方法是遍历所有元素并检查此 css 是否应用于它。这样做似乎很慢?

有没有办法通过 jQuery 选择器做到这一点?

【问题讨论】:

  • 您是否特别关心这个确切的字符串 - font-family:AvantGardeITCbyBT-Bold, sans-serif;,或者寻找使用这些字体的元素,这意味着使用 font-familyfamily:AvantGardeITCbyBT-Bold, sans-serif, Arial 的元素也会匹配。
  • 我正在寻找任何使用 AvantGardeITCbyBT-Bold 字体的元素
  • $("*").each(function() { if($(this).css("font-family") == "AvantGardeITCbyBT-Bold, sans-serif") { $ (this).ieffembedfix(); } });这可行,但有更好的方法吗?

标签: jquery css selector


【解决方案1】:

嗯,你可以扩展 jQuery 选择器

$(document).ready(function(){
   $.extend($.expr[':'], {
     AvantGardel: function(elem){
        var $e = $(elem);
        return( typeof $e.css('font-family') !== 'undefined' && $e.css('font-family') === 'AvantGardeITCbyBT-Bold' );
     },
     SansSerif: function(elem){
       var $e = $(elem);
        return( typeof $e.css('font-family') !== 'undefined' && $e.css('font-family') === 'sans-serif' );
     }
 });    
});

然后调用

$(':AvantGardel').hide();

$(':SansSerif').hide();

例如。

工作示例:http://jsbin.com/idova3/edit

【讨论】:

  • $(':AvantGardel') 会很慢。
  • @J-P:当然它很慢,因为你就是这样使用它的。 :AvantGardel 等于 *:AvantGardel 选择所有元素。您应该使用 div:AvantGardel 之类的选择器,以获得更好的性能。
  • 是的,它也很慢,因为您运行 $.fn.css 两次,这不是必需的。我也很想为此目的实现一个 flyweight jQuery 实例,这样您就不必每次都构造一个新的 jQuery 实例。
  • 很抱歉,但我仍然无法在我的网页上使用它。我不明白为什么当 w=you 让它在 jsbin 上工作时它不起作用...
  • 我已经弄清楚它为什么不起作用:代码中有一个未打印的字符,所以如果您复制/粘贴,它将不起作用。我已经修好了。
猜你喜欢
  • 2010-09-16
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多