【问题标题】: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

希望这是有道理的!

【问题讨论】:

    标签: jquery html class loops


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        • 2011-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-07
        相关资源
        最近更新 更多