获取Range对象中标记的className

Get the className of the tag within a Range object

本文关键字:className Range 对象 获取      更新时间:2024-02-15

我有两个自定义上下文菜单(一个是我写的,另一个已经存在)。只有当一个单词因为写得不好而被下划线时,我的单词才会出现,而另一个单词会出现在表上,这样用户就可以选择从表中添加另一行或删除一行。

我遇到的问题是,如果表中有错误,而你想纠正它,处理表的人会阻止我执行

对于这个contextMenu,他们编写它是为了从右键单击的地方获得一个范围对象。

document.oncontextmenu = elementSelect;
function elementSelect(){
    Rng = document.selection.createRange();
}

我试图在range对象中获取标记的className,因此如果它与错误标记中的类(class="error"的span)匹配,我会在contextMenu中为该表返回一个简单的值,这样它就不会触发。

var rngClassName = Rng(0).getAttribute("class").value;
alert("class =>" + rngClassName);
if(rngClassName == "error")
{
    return;
}

Rng(0)在几次之后用于检索somme属性并对其进行良好的工作。但是,获取类值似乎不起作用,没有返回值,脚本在var rngClassName = Rng(0).getAttribute("class").value;行停止执行,调试也没有返回错误(IE中的F12)。

这是我第一次使用Range对象,所以我想我错过了什么,但不知道是什么。

规格:IE5,香草Javascript。

尝试使用element.classList.

使用以下方法:classList.add()、classList.remove()、classList.contains()

编辑:我现在看到你的评论,下面的内容在IE5中不起作用…

但如果我正确理解你的问题,你想在选择中检查元素的类吗?我没有IE5,所以我在11和Chrome中查看了它。你可以试试这样的东西:

var selection = document.getSelection();
var selRange = selection.getRangeAt(0);
var parentNode = selRange.startContainer.parentNode;
var hasError = parentNode.classList.contains('error');

演示:https://jsfiddle.net/spdwn7bo/1/(在2秒内选择文本:))