javascript - 访问现有 div 的 .classList

标签 javascript css getelementbyid

我对如何访问 HTMLDivElement 的类列表感到有点困惑。这是相关的js代码......

    var thisDropTarget = document.getElementById(dropTargetId);
    console.log("document.getElementById(draggedId) = "+document.getElementById(draggedId));
    console.log("document.getElementById(draggedId).classList = "+document.getElementById(draggedId).classList);
    document.getElementById(draggedId).classList.remove("dragged");

第一个 console.log 说 document.getElementById(draggedId) 是一个 [object HTMLDivElement]。第二个 console.log 表示对象的 classList 未定义。下一行抛出错误,说它是“无法获取未定义或空引用的属性'remove'”。

在其他地方,在 mousemove 处理程序中,我检查拖动的元素是否确实有一个类(它有“拖动”类)。

知道为什么会这样吗?

最佳答案

根据问题的作者,问题是因为 IE 在 IE10 之前没有 classList 支持,即使那样,它也没有完全实现,直到 Edge 品牌 reshape (caniuse) .

但是,如果您需要 GTE IE 8 中的 classList,则有一个相当不错的 polyfill ( github ) 甚至嵌入在 the MDN page for classList 中。

或者,您可以自己编写一些辅助函数并手动实现您想要的 classList 部分,并使用加载“转发到实际 classList 调用”版本的检测相反,它应该可用。这是我个人走的路线,因为我在工作中处理美国教育系统,而学区因硬件陈旧而臭名昭著。如果真的不需要 classList 的全部功能(即,您只是用它来添加/从 className 中删除类),那么它对用户机器的负担会小一些.下面提供了其中的示例;请注意,您可能会稍微改进正则表达式。

$.setCls = function(ele, cls) {
    if (!$.hasCls(ele, cls)) ele.className += " " + cls;
};

$.rmCls = function(ele, cls) {
    ele.className = ele.className.replace(new RegExp("(^|\\s)" + cls + "(\\s|$)", "g"), "$2");
};

$.hasCls = function(ele, cls) {
    return ele.className.match("(^| )" + cls + "( |$)");
};

$.togCls = function(ele, cls) {
    if ($.hasCls(ele, cls)) {
        $.rmCls(ele, cls);
    } else {
        $.addCls(ele, cls);
    }
};

关于javascript - 访问现有 div 的 .classList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37054258/

相关文章:

javascript - 运行 mocha 单元测试时,如何避免我的 Q Promise catch block 在 NodeJS 回调式 API 中被调用两次?

javascript - 如何使用 CSS 或 jQuery 或 JavaScript 对齐箭头

JavaScript 继承未按预期工作

javascript - 如何完全实现消息轮询的服务器发送事件

php - 表单不在 Bootstrap 中居中

html - <td> 的宽度是内部宽度为 50% 的 <img> 的两倍

javascript - 单击时的CSS翻转动画

javascript 隐藏/显示示例 - 关闭 div

javascript - 如何使用 javascript 获取相对于另一个 div 元素的 div 元素的内容?