-1

<iframe>いくつかのHTMLコードを含む編集可能なものがあります。範囲内のすべての<a>タグを取得する必要があります。このコードを試しましたが、機能しません:

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");
}
4

2 に答える 2

0

これにより、正しい方向に進むことができます。このコードは、iframe、選択、範囲、またはリストに対してnull参照チェックを実行しません。

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";
          }
        }
      }
于 2011-10-05T19:32:32.000 に答える
0

を使用getElementsByTagName()して、範囲コンテナのすべての<a>タグを取得し、を使用して実際に範囲に属しているかどうかを確認できますrange.compareBoundaryPoints()(コンテナの一部のみが選択される場合があります)。このようなもの:

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";
  }
}
于 2011-10-05T20:00:21.467 に答える