使用jQuery select()选择div的内容

时间:2012-04-02 11:38:19

标签: javascript jquery jquery-selectors selection range

是否可以使用或调整jQuery的.select()来设置div的整个内容的选择范围?

我有一个div,它有一系列标签,输入,选择对象和一些其他UI元素。我在单独的StackOverflow帖子上找到了代码,其中一些代码托管在jsFiddle上:http://jsfiddle.net/KcX6A/570/

是否可以调整以选择输入值?或者你会怎么建议我这样做?

谢谢, 康纳


修改:更多信息

我知道如何使用jQuery获取输入值,这很简单,我也知道如何使用.select()选择独立元素的值。

在我的div中,我有一系列不同的元素类型,包括输入,标签,选择等。我需要对所有元素进行全面选择。我之前添加的jsFiddle链接显示了如何设置div的范围并选择像p标签等元素的文本。我需要的是设置div的内容范围,当我点击ctrl + c或cmd + c时复制输入值和标签。

总而言之,使用.val和.select将不适用于此我不认为。我需要以某种方式结合上述内容,但不确定如何实现。有什么想法吗?

4 个答案:

答案 0 :(得分:14)

检查这个小提琴:http://jsfiddle.net/JAq2e/

基本上诀窍是引入一个隐藏的文本节点,其内容将在复制时包含在选择中。

jQuery.fn.selectText = function(){
    this.find('input').each(function() {
        if($(this).prev().length == 0 || !$(this).prev().hasClass('p_copy')) { 
            $('<p class="p_copy" style="position: absolute; z-index: -1;"></p>').insertBefore($(this));
        }
        $(this).prev().html($(this).val());
    });
    var doc = document;
    var element = this[0];
    console.log(this, element);
    if (doc.body.createTextRange) {
        var range = document.body.createTextRange();
        range.moveToElementText(element);
        range.select();
    } else if (window.getSelection) {
        var selection = window.getSelection();        
        var range = document.createRange();
        range.selectNodeContents(element);
        selection.removeAllRanges();
        selection.addRange(range);
    }
};

并使用它:

$('#selectme').selectText();

如果要创建选择链接,可以将上述插件与事件处理程序结合使用:

代码:

$('.select-text').on('click', function(e) {
    var selector = $(this).data('selector');
    $(selector).selectText();
    e.preventDefault();
});

用法:

<a href="#" class="select-text" data-selector="#some-container">Select all</a>
<div id="some-container">some text</div>

演示:请参阅js fiddle

答案 1 :(得分:1)

如果你想与所有东西一起选择输入元素。

这是一个jQuery混合的JS解决方案

function selectElement(element) {
    if (window.getSelection) {
        var sel = window.getSelection();
        sel.removeAllRanges();
        var range = document.createRange();
        range.selectNodeContents(element);
        sel.addRange(range);
    } else if (document.selection) {
        var textRange = document.body.createTextRange();
        textRange.moveToElementText(element);
        textRange.select();
    }
}

selectElement($("div")[0]); //Select the div
$("input").trigger("select");  //select the inputs

Demo

答案 2 :(得分:0)

如果要选择内部表单元素。使用.focus() /.blur().val()函数。

 $('input').focus(); //focus on input element
 $('input').val(); //return the value of input

答案 3 :(得分:0)

不是真的。在大多数浏览器中,不可能同时选择多个输入的内容。见http://jsfiddle.net/timdown/D5sRE/1/