javascript - jquery inArray 的奇怪 ie 行为

标签 javascript internet-explorer internet-explorer-8

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

最佳答案

不幸的是,这间接回答了你的问题,但是......你似乎想要检测一个元素是否有一个类,并且由于你已经在使用 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 有选项可以做你想做的事情 - 直接通过调用 getters (或类似的东西),但我再也找不到它了:(也许我记错了。无论如何,你可以轻松地使用 $.each 和/或 $.map 来查看每个匹配的元素,但这取决于您真正想用它做什么。

关于javascript - jquery inArray 的奇怪 ie 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508759/

相关文章:

html - 响应式全屏背景。如何让它与 FF 和 IE 一起工作?

ajax - 我如何在 IE8 中观看(即调试)xmlHttpRequest() 操作? (使用 Firebug 精简版)

JavaScript 隐藏/显示在 ie8 中失败

javascript - 谷歌地图 API V3 : Exclude single marker from clustering

javascript - FormData 为空有问题吗?

javascript - 如何覆盖HTML select标签的onclick事件?

javascript - IE8风格不支持setProperty方法

javascript - 打印所有可以通过放置空格组成的字符串

javascript - Internet Explorer 何时在文档对象上引入 readyState 属性?

javascript - 在 Internet Explorer 中离线(客户端)创建 csv 文件