javascript - 如果所选文本是 HTML,如何使用 javascript 获取所选 DOM?

标签 javascript html dom

页面上有一个显示 HTML 的 div。 我可以使用获取选定的文本 window.getSelection();它返回节点列表。 也尝试过window.getSelection().toString();它返回字符串。

我需要的是选择 DOM,而不是文本或节点列表。我想在仅使用 javascript 选择文本时添加 data-child 属性。

所以,如果显示的文本是 <div>xyz</div> ,应该变成<div data-child="id-1">xyz</div>选择后。

最佳答案

您可以尝试这种方法..(如果您的 div 中有直接文本节点)

window.getSelection().focusNode.parentElement     //returns the selected element

这样你就可以设置 attr

window.getSelection().focusNode.parentElement.setAttribute('data-id', 'id-1');

您可以将其与当前的 div 一起包装在“mouseup”事件中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="myDiv">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Id natus voluptatibus eum explicabo soluta excepturi?
    </div>
    <div id="myDiv2">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Id natus voluptatibus eum explicabo soluta excepturi?
    </div>

    <script>
        var myDiv = document.getElementById('myDiv')
        myDiv.addEventListener('mouseup', function(){
            window.getSelection().focusNode.parentElement.setAttribute('data-id', 'id-1');
        })
    </script>
</body>
</html>

或者,如果有很多 div,最好的方法是仅将 attr 添加到选定的“div”

var div = document.querySelectorAll('div')
for(var i = 0; i < div.length; i++){
    div[i].addEventListener('mouseup', function(){
     window.getSelection().focusNode.parentElement.setAttribute('data-id', 'id-1');
    }, false)
}

关于javascript - 如果所选文本是 HTML,如何使用 javascript 获取所选 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46870154/

相关文章:

javascript - new Array(7) 和 Array.apply(null, Array(7)) 的区别

html - 有序列表编号位置

javascript - 检查两个或多个 DOM 元素是否重叠

javascript - 使用 `object` 创建一个 `createElement` 标签返回一个函数而不是一个对象

javascript - 有条件地设置变量的更短方法

javascript - 选择没有两个或多个名称的表单

javascript - Google Maps Api 使用自定义字符串运行 getPlaces

javascript - 动态创建特定数量的输入表单元素

javascript - 如何在点击时删除特定的李列表?

javascript - 从 Javascript 中的元素数组通过 id 访问 HTML 元素不起作用