想要以编程方式选择DOM元素内的HTML,就像用户已经使用鼠标进行选择一样,正是为了避免使用鼠标进行选择。
SO post(Select all DIV text with single mouse click)中的一些精美代码在我测试过的笔记本电脑浏览器(Windows和Mac上的IE,Chrome,FF,Safari)上非常有效:
function selectText(el) {
if (document.selection) {
var range = document.body.createTextRange();
range.moveToElementText(el);
range.select();
console.log("select 1");
} else if (window.getSelection) {
var range = document.createRange();
range.selectNode(el);
window.getSelection().addRange(range);
console.log("select 2");
}
else {
console.log("select 3");
}
};
JSFiddle:http://jsfiddle.net/z4yMh/7/
但是不适用于Safari移动版(请参阅JSFiddle)。移动开发者控制台显示其控制台显示
select 2
表示正在调用click事件,移动开发者控制台显示无错误(即方法selectNode()
似乎不为空),什么也没有发生。无法猜测原因。由于
select
还用于指代不同概念的jQuery / DOM选择器,因此很难进行谷歌搜索。我希望获得的效果类似于Safari移动设备中的本机选择,如下图所示:
这个项目不使用jQuery,但是如果解决了这个问题,jQuery就可以了。
最佳答案
根据CSS Ninja
设置范围时,iOS Safari实际上不会将所选内容显示为
突出显示,但如果要检查文档选择,它将
返回正确的内容,桌面浏览器将显示范围
在文档中选择。
但是,如果您对用户操作(例如点击“设置”
选择范围”按钮将显示在iOS突出显示的演示中。
另一个有趣的怪癖是,如果我点击内容并带来
键盘,但不要关闭它,然后刷新页面
以编程方式设置的选择将显示iOS选择突出显示。
另一个有趣的发现是,如果您执行execCommand,我将
在文章的稍后部分进行介绍,如粗体所示,它将命令应用于
选择并显示iOS选择UI。
希望这可以帮助。