获取Range对象中标记的className

时间:2016-04-06 08:59:32

标签: javascript internet-explorer

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

我遇到的麻烦是,如果表格中存在错误并且您想要更正它,那么在桌面上工作的人会阻止我执行。

对于这个contextMenu,他们编写它,这样他们就可以从右键单击的地方获得一个范围对象。

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

我试图在范围对象中获取标记的className,所以如果它与我的错误标记中的类匹配(带有class =&#34的范围;错误"),我会做一个简单的在表的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,Vanilla Javascript。

2 个答案:

答案 0 :(得分:0)

尝试使用element.classList。

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

答案 1 :(得分:0)

编辑:我现在看到您的评论,以下内容在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秒内选择文字:))