首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语义元素(如window.getSelection)上的window.getSelection()

语义元素(如window.getSelection)上的window.getSelection()
EN

Stack Overflow用户
提问于 2015-08-28 16:41:36
回答 2查看 284关注 0票数 0

假设我有这个html

代码语言:javascript
复制
<strong><a href="url">Link</a></strong>

我想用其他的程序来代替它。我用鼠标选择这个,然后调用

代码语言:javascript
复制
var sel = window.getSelection()

然而,sel的内容是一个text,它的parentNode是链接节点a (它的parentNode是我正在寻找的<strong>元素)。

我能在选择中得到诸如strongbem这样的语义元素吗?

用例:我希望在wysiwyg编辑器(html)中选择一些文本,并将其替换为一个链接。

EN

回答 2

Stack Overflow用户

发布于 2015-09-01 15:57:32

您可以使用jQuery选择器特性在字符串中搜索特定标记:

代码语言:javascript
复制
$('#btn').on('click', function() {
  var sel = getSelectionHtml();
  alert(sel.toString())
  var anchor = $(sel).find('a');
  var id = anchor.attr('id');
  // here DOM manipulation starts
  $('#' + id).html('Click here');
});

function getSelectionHtml() {
  var html = "";
  if (typeof window.getSelection != "undefined") {
    var sel = window.getSelection();
    if (sel.rangeCount) {
      var container = document.createElement("div");
      for (var i = 0, len = sel.rangeCount; i < len; ++i) {
        container.appendChild(sel.getRangeAt(i).cloneContents());
      }
      html = container.innerHTML;
    }
  }
  else if (typeof document.selection != "undefined") {
    if (document.selection.type == "Text") {
      html = document.selection.createRange().htmlText;
    }
  }
  return html;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>This is sample text</span>
<br/>
<br/>
<strong><a href="url" id="myLink">Link</a></strong>
<span>This is another text</span>
<br/>
<br/>
<span>Select two above lines and click the button below</span>
<br/>
<br/>
<input type="button" id="btn" value="Click to see selected HTML" />

用于获得HTML选择的函数从此page中重用。

票数 1
EN

Stack Overflow用户

发布于 2015-08-28 16:55:28

您确定页面上不会有其他<strong>标记吗?这根本不是唯一的,因此您可能会选择/替换错误的元素。你可以在你找到第一个或最接近的地方做一些事情,但这仍然是有风险的(甚至可以在你正在运行的基于文本的广告中获取这个信息)。

尽管如此,如果您对这种方法感到满意,您可以尝试这样的方法:

代码语言:javascript
复制
document.getElementsByTagName("strong")[0].innerHTML = "<a href='url'>Some words</a>";

这将获取页面上的第一个<strong>标记,并为您注入链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32275907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档