2016-04-06 24 views
0

我有两个自定义上下文菜单(一个是由我写的,另一个已经在那里)。只有当一个单词被加下划线时,我才会出现,因为他写得不好,另一个单词出现在桌面上,因此用户可以选择添加另一行或从该表中删除一行。获取Range对象中标记的className

我得到的麻烦是,在桌子上工作的人阻止我执行,如果在表中有错误,你想纠正它。

对于这个contextMenu,他们编写它,以便他们从右键单击完成的位置获得一个范围对象。

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

我试图让范围内的物体内部的标签的类名,所以如果它的类从我的错误标签(带class =“错误”的跨度)匹配,我做的一个简单的返回表格的contextMenu,所以它不会触发。

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

Rng(0)在几次之后用来检索索姆属性并为它们工作正常。但似乎无法获取类值,没有返回值,脚本在线路var rngClassName = Rng(0).getAttribute("class").value;处停止执行,并且没有错误从调试(IE中的F12)返回。

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

规格:IE5,Vanilla Javascript。

+0

如果您使用IE5,考虑到更新 – Pimmol

+0

@Pimskie我在这里9月以来告诉他们,自从9月以来,可悲的是我只是一个外部资源,只是有权工作,没有意见。 – Slayner

回答

0

尝试使用element.classList。

有以下几种方法:classList.add(),classList.remove(),classList.contains()

+0

在函数elementSelect()中的contextMenu我没有得到选择的元素。在函数开始工作后,只生成一个范围对象 – Slayner

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秒:)内的文本)

+0

是的,它不能在IE5中工作,很遗憾.... – Slayner