使用 jQuery select() 选择 div 的内容
是否可以使用或改编 jQuery 的 .select() 来为 div 的全部内容设置选择范围?
Is it possible to use or adapt jQuery's .select() to set a selection range on the entire contents of a div?
我有一个 div,其中包含一系列标签、输入、选择对象和几个其他 UI 元素.我在一个单独的 StackOverflow 帖子上找到了代码,其中一些代码托管在 jsFiddle 上:http://jsfiddle.net/KcX6A/570/
I have a div which has a series of labels, inputs, select objects and a couple of other UI elements. I have found code on a separate StackOverflow post with some code hosted on jsFiddle: http://jsfiddle.net/KcX6A/570/
这也可以适应选择输入的值吗?或者你会建议我怎么做?
Can this be adapted to select the value of inputs also? Or how would you suggest I go about this?
谢谢,康纳
更多信息
我知道如何使用 jQuery 获取输入的值,这很简单,我也知道如何使用 .select() 选择独立元素的值.
I know how to get the value of inputs using jQuery, that is easy, I also know how to select he values of independent elements using .select().
在我的 div 中,我有一系列不同的元素类型,包括输入、标签、选择等.我需要对所有元素进行整体选择.我之前添加的 jsFiddle 链接显示了如何设置 div 的范围并选择诸如 p 标签等元素的文本.我需要的是设置 div 内容的范围以及当我点击 ctrl+c 或 cmd+c 时复制输入的值以及标签.
In my div I have a series of different element types including inputs, labels, selects, etc. I need an overall selection of all elements. The jsFiddle link I added earlier shows how to set the range of a div and select the text of elements like p tags etc. What I need is to set the range of the div's contents and when I hit ctrl+c or cmd+c it copies the values of the inputs as well as the labels.
总而言之,我认为使用 .val 和 .select 不起作用.我需要以某种方式将上述内容结合起来,但不确定如何完成.有什么想法吗?
So to summarise, using .val and .select won't work for this I don't think. I need to combine the above in some way but not sure exactly how this will be accomplished. Any ideas?
推荐答案
检查这个小提琴:http://jsfiddle.net/JAq2e/一个>
基本上,诀窍是引入一个隐藏的文本节点,其内容将在复制时包含在选择中.
Basically the trick is to introduce a hidden text node whose content will be included in the selection when copied.
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();
<小时>
如果您想创建选择链接,可以将上述插件与事件处理程序结合使用:
You can couple the above plugin with an event handler if you want to create selection links :
代码:
$('.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
相关文章