Firefox 需要在可编辑的iframe中获取选择中的所有A标记,并将它们添加到属性“中”;“类”;
我有一个可编辑的Firefox 需要在可编辑的iframe中获取选择中的所有A标记,并将它们添加到属性“中”;“类”;,firefox,tags,range,getselection,Firefox,Tags,Range,Getselection,我有一个可编辑的,里面有一些HTML代码。我需要获得我范围内的所有标签。我尝试了此代码,但不起作用: var select = document.getElementById(iframe_id).contentWindow.getSelection(); var range = select.getRangeAt(0); //HERE I WANT TO FIND ALL TAGS IN THIS RANGE AND IF IT "A" - ADD NEW ATTRIBUTE "CLASS".
,里面有一些HTML代码。我需要获得我范围内的所有
标签。我尝试了此代码,但不起作用:
var select = document.getElementById(iframe_id).contentWindow.getSelection();
var range = select.getRangeAt(0);
//HERE I WANT TO FIND ALL TAGS IN THIS RANGE AND IF IT "A" - ADD NEW ATTRIBUTE "CLASS". SOMETHING LIKE THIS
var parent = rng.commonAncestorContainer;
for(var i=0; i<parent.childNodes.length; i++)
{
if(parent.childNodes[i].tagName.toLowerCase() == "a")
parent.childNodes[i].setAttribute("class", "href_class");
}
var select=document.getElementById(iframe_id).contentWindow.getSelection();
var range=select.getRangeAt(0);
//在这里,我想找到这个范围内的所有标记,如果它是“A”-添加新属性“CLASS”。像这样的
var parent=rng.commonAncestorContainer;
对于(var i=0;i这应该让您从正确的方向开始。此代码不会对iframe、selection、range或list执行任何空引用检查
function addAnchorClass(targetFrameId) {
var targetIframe = document.getElementById(targetFrameId).contentWindow;
var selection = targetIframe.getSelection();
var range = selection.getRangeAt(0);
var alist = range.commonAncestorContainer.getElementsByTagName("a");
for (var i=0, item; item = alist[i]; i++) {
if (selection.containsNode(item, true) ) {
item.className += "PUT YOUR CSS CLASS NAME HERE";
}
}
}
您可以使用获取所有(只能选择容器的一部分)。类似如下:
var links = rng.commonAncestorContainer.getElementsByTagName("a");
for (var i = 0; i < links.length; i++)
{
var linkRange = document.createRange();
linkRange.selectNode(links[i]);
if (rng.compareBoundaryPoints(Range.START_TO_START, linkRange) <= 0 && rng.compareBoundaryPoints(Range.END_TO_END, linkRange) >= 0)
{
links[i].className = "href_class";
}
}
var links=rng.commonAncestorContainer.getElementsByTagName(“a”);
对于(变量i=0;i
这并没有回答OP的问题,他询问了在某个范围内迭代节点的问题。谢谢您的回答,但此代码工作不正确。例如,我在可编辑的iframe中有四个字符串“第一个字符串,第一个字符串,第一个字符串,
结束字符串,结束字符串
”我在desi中选择了iframe中的第二个和第三个字符串gn模式和选择后,我希望从我的选择中获取所有标记(a),而不是从BODY@IlyaBazhinov:您确实看过代码了吗?它对我来说工作正常,请参阅。它只选择完全包含在范围内的元素。Wladimir-尝试选择第二行和第三行(仅链接).Where在chrome中没有结果。并且您的代码只显示url值,而不是在iframe selection中修改的“a”属性?@IlyaBazhinov:它在Firefox和chrome中都适用于我。请注意,它仅适用于完全在选择中的链接-如果您想要不同的行为,则需要更改CompareBundaryPoints()
检查。JSFIDLE示例显示URL用于演示目的-我回答中的代码修改类。我郑重建议您尝试理解代码,而不是盲目复制。对不起,我的英语不好,但我认为您不理解我的问题…您的解决方案不是我需要的((谢谢