javascript - 使用类扩展 HTMLElement 接口(interface)

标签 javascript html internet-explorer internet-explorer-9

我想用自定义属性上的自定义对象扩展 HTMLElement 接口(interface)。这可能吗?

这是我得到的:

if (typeof HTMLElement.prototype.classList === "undefined") {
    HTMLElement.prototype.classList = function ClassList() { return this.className.split(' '); };
    HTMLElement.classList.prototype.add = function(name) {
        if (classList.indexOf(name) !== -1) {
            return;
        }
        classList[classList.length] = name;
        this.className = classList.join(' ');
    };
    HTMLElement.classList.prototype.remove = function(name) {
        var index = classList.indexOf(name);
        if (index !== -1) {
            this.className = classList.splice(index + 1, 1).join(' ');
        }
    }
}

这应该可以让您了解我需要什么。

我想为 IE9 实现我自己的 classList 功能。 在 IE 中,这将导致未定义并引发错误。

element.classList.add('fadeIn');

有没有简单的方法来实现这个?

编辑

我已经研究了一段时间,但我的知识还不够好,无法准确理解发生了什么。我仍然必须调用 document.getElementById('whatever').classList() 以避免出现“undefined”。我希望能够不带大括号调用 classList(当然,如果浏览器不支持 classList)

最佳答案

要定义一个 getter(可以在没有括号的情况下调用的函数),请使用 Object.defineProperty .适用于 IE9。

function getClassList()
{
    var element = this;
    var classList = this.className.split(' ');
    classList.add = function(name) {
        if (classList.indexOf(name) !== -1) {
            return;
        }
        classList.push(name);
        element.className = classList.join(' ');
    };
    classList.remove = function(name) {
        var index = classList.indexOf(name);
        if (index !== -1) {
            classList.splice(index, 1);
            element.className = classList.join(' ');
        }
    };
    return classList;
}

Object.defineProperty(HTMLElement.prototype, 'classList', { get: getClassList });

关于javascript - 使用类扩展 HTMLElement 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41726625/

相关文章:

javascript - 将 HTML 字符串传递给 JavaScript 函数

javascript - Canvas.toDataURL 不适用于移动 Safari iOS?

html - 垂直居中 li 中的图像并更改其高度

javascript - 无法加载 "IE",未注册! Karma 上的错误消息

javascript - Javascript 日历本地化

javascript - 异步 Redux 操作 : add auth token to fetch() request

html - 如何在 html 和 css 中将图像调整为几何图形?

css - 在字体大小中使用相对值以提高可访问性是否仍然有用,还是仅适用于 IE6?

jquery - $.isPlainObject($ ('...' )) == true 在 IE 中

javascript - 使 Kendo UI DropDownList 将 Select Control 的 Title 属性显示为 kendoTooltip