我继承了一些 jQuery 和 HTML,需要找出是否有任何 HTML 元素具有任何值的类名。我已经阅读了一些主题并用谷歌搜索,但找不到任何有用的东西。所以在伪代码中我想要的是:
Loop through all HTML elements
If any of them have any class at all:
Get their class name as a string
希望这是有道理的!
尝试:
$('*').each(function() {
if ($(this).hasClass()) {
var class_name = $(this).attr('class');
// do something
}
});
你为什么要这样做,我不知道。这是非常低效的
物有所值:
$(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/
你可以使用这样的东西:
$("[class]").each(function(){
var className = $(this).attr("class");
})
演示: http: //jsfiddle.net/L5WAV/1/ (查看控制台中的结果 - 应该找到两个 div)
要使用类获取所有元素,您可以使用$('*[class]')
:
$('*[class]').each(function(){
// do what you want
});
您甚至可以使用 轻松计算它们$('*[class]').length
。
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
),其中每个出现的文档类都作为属性,因此如果文档中存在具有相同类的元素,则类名不会多次显示。不过,我真的不会这样做,也不会看到任何用例。
不是一个直接的问题,但我需要它,所以它适用于未来的用户。
如果您想查找任何元素是否具有特定类,您可以使用此函数:
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.");
}
}
无需循环您的元素:
if( jQuery( ".myClass" ).is( ":visible" ) )
{
// do your thing
}
缺点是您的元素不能将display
-property 设置为none