无法在IE8上获得内部HTML标记

时间:2011-05-17 13:18:24

标签: javascript html html5 internet-explorer-8

我正在尝试获取类名current_page_item [0]的innerhtml ...这在FF中工作正常,甚至在IE9中也是如此。但在IE 8中,似乎是“var classelem=document.getElementsByClassName('current_page_item')[0].innerHTML;

行中的一些javascript错误

我试着在上面一行后发出警报。但它没有显示消息“Hello again”。

知道如何解决浏览器问题吗?它是document.getElementsByClassName在IE8中不起作用的东西吗?

<html>
<head>
<script type="text/javascript">
function updatesidebar()
{
alert("Hello");
var classelem=document.getElementsByClassName('current_page_item')[0].innerHTML;


alert("Hello again");


}
</script>


</head>
<body>
<div id="main">

<div class="menu_main"> 

                      <ul class='mainmenu' id='root'>
<li><a href="/home" class="">Home</a></li>
<li><a href="/solutions" class="">Solutions</a>
</li><li><a href="/services" class="">Services</a></li>
<li><a href="/about-us" class="current_page_item">About Us</a></li>
<li><a href="/news" class="">News and Events</a></li>
<li><a href="/careers" class="">Careers</a></li>
<li><a href="/contact-us" class="">Contact Us</a></li>
</ul>

                </div>


</div>
<script type="text/javascript">
window.onload=updatesidebar();
</script>

</body>
</html>

5 个答案:

答案 0 :(得分:3)

虽然情况正在改善,但并非所有浏览器都本身支持getElementsByClassName。您可以使用检查本机实现的函数,如果找到则使用它,或者抓取所有元素并检查每个元素的类名,返回匹配的数组。

function getElementsByClassName( className, context ) {
    //the context is the container we will confine our search to (optional)
    context = context || document;
    //use native implimentation if it exists
    if( context.getElementsByClassName ) {
        return context.getElementsByClassName( className ); //returns a nodeList
    }
    //we have to do it ourselves if we get here
    var candidates = context.getElementsByTagName( '*' );
    var found = [];
    //regular expression to match the classname as per comments
    var rxp = new RegExp( "(?:^|\\s)" + className + "(?:\\s|$)");
    for( var i = 0, l = candidates.length; i < l; i++ ) {
        if( rxp.test( className ) {
            found.push( candidates[i] );
        }
    }
    return found; //returns an array of nodes
}

答案 1 :(得分:1)

变化:

window.onload=updatesidebar();

为:

window.onload=updatesidebar;

您刚才拥有它的方式将立即调用该函数,而不是在加载页面时。

答案 2 :(得分:1)

getElementsByClassName不是JS本机函数,您必须引用任何包含它的库

答案 3 :(得分:1)

getElementsByClassName在IE8中不兼容。它是HTML5的一部分

答案 4 :(得分:0)

您不必更改代码,但如果不存在,您可以添加该功能......;)

if (typeof document.getElementsByClassName!='function') {
    document.getElementsByClassName = function() {
        var elms = document.getElementsByTagName('*');
        var ei = new Array();
        for (i=0;i<elms.length;i++) {
            if (elms[i].getAttribute('class')) {
                ecl = elms[i].getAttribute('class').split(' ');
                for (j=0;j<ecl.length;j++) {
                    if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) {
                        ei.push(elms[i]);
                    }
                }
            } else if (elms[i].className) {
                ecl = elms[i].className.split(' ');
                for (j=0;j<ecl.length;j++) {
                    if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) {
                        ei.push(elms[i]);
                    }
                }
            }
        }
        return ei;
    }
}