在IE8中使用filter和queryselectorall的问题

时间:2018-01-09 14:10:13

标签: javascript

我有一个要求,我应该在页面中获取活动元素并根据元素执行操作。该方法应该在ie8和& IE11。下面是适用于IE11但不适用于IE8的代码。我知道在下面的代码中使用的filter或queryselectorall导致了问题。有人可以帮我解决这个问题。

    function focusNextElement(keyCode) {
        var focussableElements = 'select:not([disabled]), button:not([disabled]),input[type=radio]:not([disabled]),input[type=text]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])';
        if (document.activeElement && document.activeElement.form) {

            var focussable = Array.prototype.filter.call(document.activeElement.form.querySelectorAll(focussableElements),
    function (element) {
        return element.offsetWidth > 0 || element.offsetHeight > 0 || element === document.activeElement 
    });
            var index = focussable.indexOf(document.activeElement);            
            if (index > -1) {
                alert('indide');
                var nextElement = focussable[index + 1] || focussable[0];
                nextElement.focus();
            }
        }
        event.preventDefault();
        return false;
    }

    if (document.addEventListener !== undefined)
    {
            document.addEventListener('keydown', function (event) {
            if (event.keyCode == 9) {
                if (event.target.nodeName === 'INPUT') {
                    focusNextElement(event.keyCode);
                }
            }
        });
    }
    else
    {
        document.attachEvent('onkeydown', function (event) {
            if (event.keyCode == 9) {
                if (event.srcElement.tagName === 'INPUT') {
                    focusNextElement(event.keyCode);
                }
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

我需要获取页面中的所有活动元素,并且需要根据返回的值执行一些操作。

当页面在IE11中呈现但在IE8中不呈现时,以下代码正在工作。有人可以帮我修复代码,以便它也可以在IE8中工作。

var focussableElements ='select:not([disabled]),button:not([disabled]),input [type = radio]:not([disabled]),input [type = text]:not([disabled] ],[tabindex]:not([disabled]):not([tabindex =“ - 1”])';

    if (document.activeElement && document.activeElement.form) {
        var focussable = Array.prototype.filter.call(document.activeElement.form.querySelectorAll(focussableElements),
function (element) {
    return element.offsetWidth > 0 || element.offsetHeight > 0 || element === document.activeElement 
});
        var index = focussable.indexOf(document.activeElement);