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用于演示目的-我回答中的代码修改类。我郑重建议您尝试理解代码,而不是盲目复制。对不起,我的英语不好,但我认为您不理解我的问题…您的解决方案不是我需要的((谢谢