想要以编程方式选择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。


希望这可以帮助。

07-28 02:48
查看更多