发现任何元素是不是在 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 中选择具有 name 属性的元素? [复制]
jQuery 是不是有任何函数来确定 jQuery 对象引用的 DOM 元素的标签类型?