获取元素的所有属性在IE上的工作方式不同

时间:2011-11-26 23:21:12

标签: jquery

如果您在IE7和Firefox上运行此脚本http://jsfiddle.net/y8jp8/2/,您可以看到: 结果不一样。

我只想看到3个属性(id,title和myattr)及其值。我怎么能在IE中做到这一点?

2 个答案:

答案 0 :(得分:2)

这是对roXon答案的修正,但仍然没有完美的解决方案..

var result = "";
var attrs = $("#sample")[0].attributes;

for(var i=0;i<attrs.length;i++) {
    if(attrs[i].nodeValue != null 
    && attrs[i].nodeValue != '' 
    && attrs[i].nodeValue != 'inherit'){
        result += ( attrs[i].nodeName + "=" + attrs[i].nodeValue + "<br>");
    }

    $('#log').html(result);
}

http://jsfiddle.net/digitaloutback/pMVJw/9/

<强>更新

IE7似乎没有过滤掉未指定的属性,例如,这是示例中“sample”属性的数据:

parentNode => null 
nodeValue => sample 
firstChild => null 
name => id 
expando => false 
lastChild => null 
ownerDocument => [object] 
attributes => null 
previousSibling => null 
value => sample 
nodeType => 2 
nodeName => id 
childNodes => null 
nextSibling => null 
specified => true 
ownerElement => undefined 

因此,您需要针对'指定'进行测试,如:

var result = "";
var attrs = $("#sample")[0].attributes;

for(var i=0;i<attrs.length;i++) {   

    if(attrs[i].specified == true ) {
        result += ( attrs[i].nodeName + "=" + attrs[i].nodeValue + "<br>");
    }

    $('#log').html(result);

}

http://jsfiddle.net/digitaloutback/pMVJw/10/

答案 1 :(得分:1)

您是否有任何理由不能获得所需的三个显式值而不是迭代所有属性?这在IE7和Chrome中获得了相同的结果。

http://jsfiddle.net/y8jp8/22/

var result = "";
result += 'id=' + $('#sample').attr('id') + '<br />';
result += 'title=' + $('#sample').attr('title') + '<br />';
result += 'myattr=' + $('#sample').attr('myattr') + '<br />';
$("#log").html( result );