你好,这似乎是在IE8上工作:
var clsName = link.parents("div.fixed_column").attr("class").split(" ");
if($.inArray("column_one", clsName)
虽然这个报告错误(在jquery中对象期望错误)。
var clsName = link.parents("div.fixed_column").attr("class");
这样做的正确方法是什么?我认为inArray的目的是jquery将处理跨浏览器问题。
答案 0 :(得分:4)
不幸的是,这是间接回答你的问题,但是......你似乎想要检测一个元素是否有一个类,并且因为你已经在使用jQuery,所以只需使用hasClass
方法 - { {3}}
有关您的特定代码,请尝试:
if (link.parents("div.fixed_column").hasClass("column_one")) {
// It has the "column_one" class
}
您问题的最直接答案是link.parents("div.fixed_column").attr("class")
返回单个字符串。当jQuery选择器(div.fixed_column
)返回多个元素时,这在使用类时很有可能,使用获取信息的jQuery方法(如.attr
),使用一个参数...来“获取”值)仅返回第一个匹配元素的值。
所以说选择器匹配3个元素:
["<div id='div30' class='fixed_column div30_class'></div>",
"<div id='div2' class='fixed_column div2_class'></div>",
"<div id='div17' class='fixed_column div17_class'></div>"]
然后.attr("class")
返回的值为:fixed_column div30_class
,因为它是第一个匹配的元素。
我不确定,但我认为你期望jQuery返回所有匹配元素值的数组,但事实并非如此。所以这并不意味着jQuery不会处理跨浏览器问题,只是意味着你需要查找方法所做/返回的内容。
我可以发誓jQuery 2.0可以选择做你想要的 - 直接来自调用getters(或类似的东西),但我再也找不到它了:(也许我记错了。不管怎么说,你可以轻松地使用$.each
和/或$.map
来查看每个匹配的元素,但这取决于您真正尝试使用它的内容。
答案 1 :(得分:1)
您无法使用.attr("class")
将多个元素的属性读入数组。但是你为什么不直接在选择器中定位所需的类?
var cols = link.parents("div.fixed_column.column_one");
然后更改条件以检查空集:
if(cols.length) { ...