Не удается получить innerHTML тега в IE8 - PullRequest
4 голосов
/ 17 мая 2011

Я пытаюсь получить innerhtml имени класса current_page_item [0] ... И это отлично работает в FF и даже в IE9.Но в IE 8 кажется, что в строке "var classelem=document.getElementsByClassName('current_page_item')[0].innerHTML;.

есть какая-то ошибка javascript. Я пытался поставить предупреждение после строки выше. Но это не выводит сообщение" Hello again ".1005 * Любая идея, как решить проблему браузера для этого? Это что-то, что 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 ]

3 голосов
/ 17 мая 2011

Не все браузеры изначально поддерживают 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 голос
/ 17 мая 2011

getElementsByClassName не является нативной функцией JS, вы должны ссылаться на любую библиотеку, включая ее

1 голос
/ 17 мая 2011

getElementsByClassName не поддерживается в IE8. это часть HTML5

1 голос
/ 17 мая 2011

Изменение:

window.onload=updatesidebar();

до:

window.onload=updatesidebar;

То, как вы это делаете сейчас, будет вызывать функцию немедленно, а не при загрузке страницы.

0 голосов
/ 12 декабря 2011

вам не нужно менять код, но вы можете добавить эту функцию, если она не существует ...;)

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...