使用javascript在一次左键单击中选择div中的所有文本

使用javascript在一次左键单击中选择div中的所有文本,javascript,jquery,html,Javascript,Jquery,Html,我在div中有一个简单的不可点击链接,如下所示: 它是一个可共享的链接,用户可以将粘贴复制到其他内容中 出于可用性目的,我希望在div中的任意位置单击鼠标左键以选择整个链接: 我对javascript/web编程了解不多,所以我尝试了以下方法: <div id="share_link" onClick="select_all('share_link')"><%= request.url %></div> 这个javascript <script

我在div中有一个简单的不可点击链接,如下所示:

它是一个可共享的链接,用户可以将粘贴复制到其他内容中

出于可用性目的,我希望在div中的任意位置单击鼠标左键以选择整个链接:

我对javascript/web编程了解不多,所以我尝试了以下方法:

<div id="share_link" onClick="select_all('share_link')"><%= request.url %></div>

这个javascript

<script type="text/javascript">
    function select_all(id) {
        document.getElementById(id).focus();
    }
</script>

功能选择全部(id){
document.getElementById(id.focus();
}

这不管用。我想知道我应该做什么最简单的事情来实现我想要的。我曾考虑将div更改为文本输入,或将其中的文本更改为链接,但理想情况下,其中的内容应为只读、不可编辑且不可单击的

$("#myInputField").focus(function(){
    // Select input field contents
    this.select();
});
您可以使用html中的readonly属性来掩盖它是一个输入字段的事实:

    <input type="text" name="country" value="Norway"
  readonly="readonly" />

与其他浏览器相比,IE实现这一点完全不同。以下内容适用于所有主要浏览器:

<script type="text/javascript">
    function select_all(el) {
        if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") {
            var range = document.createRange();
            range.selectNodeContents(el);
            var sel = window.getSelection();
            sel.removeAllRanges();
            sel.addRange(range);
        } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") {
            var textRange = document.body.createTextRange();
            textRange.moveToElementText(el);
            textRange.select();
        }
    }
</script>

<div onclick="select_all(this)">Link text</div>

功能选择全部(el){
if(typeof window.getSelection!=“未定义”&&typeof document.createRange!=“未定义”){
var range=document.createRange();
范围。选择节点内容(el);
var sel=window.getSelection();
选择removeAllRanges();
选择添加范围(范围);
}else if(typeof document.selection!=“未定义”&&typeof document.body.createTextRange!=“未定义”){
var textRange=document.body.createTextRange();
textRange.moveToElementText(el);
textRange.select();
}
}
链接文本

可能重复:它不起作用。问题是您绑定了焦点事件。因此(出于某种原因),选择不会持续。但是,绑定click事件确实有效。我对此进行了测试,似乎有效。但我最终还是选择了下面Sime关于可读性和简洁性的答案。谢谢。很公平,Šime's可能是最好的解决方案。我投票支持你的Tim,因为它最适合在div中选择文本,而不是只读状态的输入。谢谢你的回答。
<script type="text/javascript">
    function select_all(el) {
        if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") {
            var range = document.createRange();
            range.selectNodeContents(el);
            var sel = window.getSelection();
            sel.removeAllRanges();
            sel.addRange(range);
        } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") {
            var textRange = document.body.createTextRange();
            textRange.moveToElementText(el);
            textRange.select();
        }
    }
</script>

<div onclick="select_all(this)">Link text</div>