小编典典

选择元素中的文本(类似于用鼠标突出显示)

all

我想让用户点击一个链接,然后它在另一个元素( 不是 输入)中选择 HTML 文本。

“选择”是指通过将鼠标拖到文本上来选择文本的相同方式。这一直是研究的负担,因为每个人都在用其他术语谈论“选择”或“突出显示”。

这可能吗?到目前为止我的代码:

HTML:

<a href="javascript:" onclick="SelectText('xhtml-code')">Select Code</a>
<code id="xhtml-code">Some Code here </code>

JS:

function SelectText(element) {
    $("#" + element).select();
}

我错过了一些明显的东西吗?


阅读 87

收藏
2022-03-14

共1个答案

小编典典

Javascript

function selectText(node) {

    node = document.getElementById(node);



    if (document.body.createTextRange) {

        const range = document.body.createTextRange();

        range.moveToElementText(node);

        range.select();

    } else if (window.getSelection) {

        const selection = window.getSelection();

        const range = document.createRange();

        range.selectNodeContents(node);

        selection.removeAllRanges();

        selection.addRange(range);

    } else {

        console.warn("Could not select text in node: Unsupported browser.");

    }

}



const clickable = document.querySelector('.click-me');

clickable.addEventListener('click', () => selectText('target'));


<div id="target"><p>Some text goes here!</p><p>Moar text!</p></div>

<p class="click-me">Click me!</p>

这是一个工作演示。对于那些正在寻找 jQuery
插件的人,我也做了一个


jQuery(原始答案)

我在这个线程中找到了解决方案。我能够修改给定的信息并将其与一些
jQuery 混合,以创建一个非常棒的函数来选择任何元素中的文本,而不管浏览器如何:

function SelectText(element) {
    var text = document.getElementById(element);
    if ($.browser.msie) {
        var range = document.body.createTextRange();
        range.moveToElementText(text);
        range.select();
    } else if ($.browser.mozilla || $.browser.opera) {
        var selection = window.getSelection();
        var range = document.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
    } else if ($.browser.safari) {
        var selection = window.getSelection();
        selection.setBaseAndExtent(text, 0, text, 1);
    }
}
2022-03-14