除IE *外,所有浏览器均可正常工作

时间:2014-01-28 09:37:45

标签: javascript jquery internet-explorer-8

我试图解决这个问题,但没有成功..在IE8中遇到问题..它一直在说JSObject预期但似乎无法解决问题是什么,因为它在其他任何地方工作正常..

jQuery(document).ready(function($) {
console.log('here');
// Profile Selector

// Get all the big profile elements listed above.
// Transform the result of `getElementsByTagName` from a NodeList
// to an Array. Just good practice, really.

var profileWrapper = document.getElementById('profileWrapper');

var bigElements = Array.prototype.slice.call(
    profileWrapper.getElementsByTagName('div')
);

// Find an element in the `bigElements` array above that
// has a className that contains the `id` argument.
function selectBigElement( id ) {

    // loop thru all the elements in `bigElements`, and...
    for( var i = 0; i < bigElements.length; ++i ) {

        // ... if the current element's className contains the
        // query string argument (`id`), then show it...
        if( ~bigElements[i].className.indexOf( id ) ) {
            bigElements[i].style.display = 'block';
        }

        // ... Otherwise, hide it.
        else {
            bigElements[i].style.display = 'none';
        }
    }

};

$('.mini_profile').mouseover(function(event) {
    selectBigElement(this.id);
});

selectBigElement( 179 );
});

1 个答案:

答案 0 :(得分:2)

从查看代码开始,您将使用一些不受支持的方法:

Array.prototype.slice.call(profileWrapper.getElementsByTagName('div'));

这会尝试将NodeList转换为Array。这在IE8中不受支持,因为它不支持NodeLists作为主机对象。

对于常规for循环,您不需要这样做,因为您可以像数组一样循环NodeList(不包括Array.prototype.forEach()),只需删除Array.prototype.slice.call()方法即可坚持:

var bigElements = profileWrapper.getElementsByTagName('div');

然而试图使用indexOf,这是ECMAScript 5和Array.prototype方法。要获得IE8支持,您需要Polyfill这两个实现或编写一些包装函数来获得相同的结果。