发现任何元素是不是在 jQuery 中具有任何类

Posted

技术标签:

【中文标题】发现任何元素是不是在 jQuery 中具有任何类【英文标题】:Discovering if any element has any class in jQuery发现任何元素是否在 jQuery 中具有任何类 【发布时间】:2013-01-15 21:28:18 【问题描述】:

我继承了一些 jQuery 和 html,需要找出是否有任何 HTML 元素具有任何值的类名。我已经阅读了一些主题并用谷歌搜索,但找不到任何有用的东西。 所以在伪代码中我想要的是:

Loop through all HTML elements

If any of them have any class at all:
    Get their class name as a string

希望这是有道理的!

【问题讨论】:

【参考方案1】:

试试:

$('*').each(function() 
    if ($(this).hasClass()) 
        var class_name = $(this).attr('class');
        // do something
    
);

你为什么要这样做,我不知道。它非常效率低下

【讨论】:

是的,这是一个相当繁重的操作。我敢打赌,有更好的方法来解决这个问题。 谢谢 :) 这不是我特别想做的事情。我不是 jQuery 专家,但是对于我继承的代码,我认为这可能是满足我需要和客户(他认为自己是一个有才华的业余程序员)想要的唯一方法。我已经设法将课程数量减少到 6 个,所以我希望这会减少开销。再次感谢,我很感激。 如果 $('*') 选择器不是 ' * ',则相当有效【参考方案2】:

物有所值:

$(this).hasClass() 

总是返回 false

$("[class]") 

也不起作用,因为它返回像

这样的元素
<p class=""> my p </p>

jsfiddle 在这里:http://jsfiddle.net/JZ8LV/1/

解决方案

$(this).hasClass('') 

返回true元素没有一个类,包括那些形式

<p class=""> my p </p>

所以

$('*').each(function() 
    if ($(this).hasClass('') === false) 
        $("body").append($(this).prop("tagName") + " has a proper class defined <br/>");
    
);

返回所有定义了适当类的标签

Jsfiddle:http://jsfiddle.net/2Rtj5/

【讨论】:

男人。你太棒了。【参考方案3】:

你可以这样使用:

$("[class]").each(function()
   var className = $(this).attr("class");
)

Has Attribute Selector

演示:http://jsfiddle.net/L5WAV/1/(在控制台中查看结果 - 应该找到两个 div)

【讨论】:

也感谢您的宝贵时间,我很感激 :)【参考方案4】:

要获取所有具有类的元素,您可以使用$('*[class]')

$('*[class]').each(function()
    // do what you want
);

您甚至可以使用$('*[class]').length 轻松计算它们。

【讨论】:

也感谢您的宝贵时间,非常感谢 :)【参考方案5】:
var classObj = ;

$('*').each(function()
    var cNames = this.className.split(' ');
    for(var i=0, l=cNames.length; i<l; i+=1)
        classObj[cNames[i]] = true;
    
);

这将为您提供一个 Object (classObj),其中包含文档的每个出现的类作为属性,因此如果文档中存在具有相同类的元素,则类名不会多次显示。不过,我真的不会这样做,也不会看到任何用例。

【讨论】:

感谢您的宝贵时间,非常感谢 :)【参考方案6】:

不是一个直接的问题,但我需要它,所以这里是为未来的用户准备的。

如果您想查找 any 元素是否具有 特定 类,您可以使用此函数:

function find_any_element(className) 
    var found = false;
    $('*').each(function() 
        if ($(this).hasClass(className)) 
            var class_name = $(this).attr('class');
            alert("There is an element with this class: " + class_name);
            found = true;
        
    );
    if(!found) 
        alert("No element with className '" + className + "' found.");
    

【讨论】:

【参考方案7】:

无需循环遍历您的元素:

if( jQuery( ".myClass" ).is( ":visible" ) )

    // do your thing

缺点是您的元素不能将display-property 设置为none

【讨论】:

以上是关于发现任何元素是不是在 jQuery 中具有任何类的主要内容,如果未能解决你的问题,请参考以下文章

jquery - 如何检查元素是不是附加了任何类

过滤掉 jQuery 结果集中所有具有某个类的父级(在任何级别)的元素

如何在 jQuery 中选择具有 name 属性的元素? [复制]

jQuery 是不是有任何函数来确定 jQuery 对象引用的 DOM 元素的标签类型?

jQuery-UI 可拖动克隆 - 启动处理程序是不是收到对被克隆元素的任何引用?

有没有办法检测浏览器是不是具有亚像素精度?