检测DOM元素是否确实具有IE8中定义的属性

时间:2014-01-08 10:59:08

标签: javascript jquery html dom internet-explorer-8

以下示例在IE8中进行了测试

我有一个非常简单的列表

<select>
   <option>opt 1</option>
   <option>opt 2</option>
</select>

假设this引用第一个选项的DOM元素。当我this.selected时,它会返回true,即使它不是。我想要的是仅当DOM具有由用户/编码器明确定义的属性trueselected时才返回selected="selected"的函数。

我不能使用hasAttribute,因为它没有在ie8中定义。

请帮忙。

3 个答案:

答案 0 :(得分:3)

如果当前在选择框中选择了该选项,则选项元素的selected属性为true。在标记中,您可以通过指定selected属性来选择一个选项,但是还有其他方法可以在选择框中选择该选项(用户可以选择它,浏览器可以选择第一个选项)默认情况下,依此类推)。请注意关于默认值的位。在下拉选择框中,如果您没有在其中任何一个上放置selected属性,几乎所有(所有?)浏览器都会自动选择第一个选项。

所以this.selected可靠地告诉你元素是否被选中。

不幸的是,IE8的getAttribute将为"selected"属性返回"selected",即使标记没有它,如果选择了该元素。大多数其他浏览器不会这样做,他们理解属性和属性之间的区别,但遗憾的是IE8没有。

幸运的是,jQuery的attr函数有一个解决方法(因为你标记了你的问题jquery)。如果元素没有该属性,attr将返回undefined(而不是null),即使在IE8上也是如此。所以如果你真的想知道,你可以找到那种方式。但很少关心这一点。 (注意:解决方法是in v1.10.2,但显然not in v1.7.2;如果您使用IE8查看它们,这些链接才真正有意义。)

但是在jQuery中读取选择框的值的常规方法是在选择框元素上使用.val

答案 1 :(得分:0)

你应该使用jQuery,然后:

var value = $('select').val();

这将返回所选选项的属性值,或者如果没有值,则返回标签(选项标签内的文本)。

答案 2 :(得分:0)

试试这个

function check() {
   return document.getElementsByTagName('select').selectedIndex > -1;
}