0

您好,这似乎适用于 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 将处理跨浏览器问题。

4

2 回答 2

4

不幸的是,这间接回答了你的问题,但是......你似乎正在寻找一个元素是否有一个类,并且由于你已经在使用 jQuery,只需使用该hasClass方法 - http://api.jquery.com /hasClass/

对于您的特定代码,请尝试:

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 可以选择做你想做的事 - 直接通过调用 getter(或类似的东西),但我再也找不到它了 :( 也许我记错了。无论如何,你可以很容易地使用$.each和/或$.map查看每个匹配的元素,但这取决于您真正尝试使用它做什么。

于 2013-03-19T19:46:19.107 回答
1

您不能将多个元素的属性读入带有.attr("class"). 但是你为什么不像这样在选择器中定位所需的类呢?

var cols = link.parents("div.fixed_column.column_one");

然后更改条件以检查空集:

if(cols.length) { ...
于 2013-03-19T19:45:42.090 回答