Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Bookmarklet,用于捕获选定内容,包括html标记_Javascript_Bookmarklet - Fatal编程技术网

Javascript Bookmarklet,用于捕获选定内容,包括html标记

Javascript Bookmarklet,用于捕获选定内容,包括html标记,javascript,bookmarklet,Javascript,Bookmarklet,我正在构建一个JS bookmarklet,它允许我捕获用户在浏览器中选择的文本,并将其发送到web应用程序。我目前已经阅读了几篇教程,其中有一个脚本如下所示: javascript:var t;try {t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&doc

我正在构建一个JS bookmarklet,它允许我捕获用户在浏览器中选择的文本,并将其发送到web应用程序。我目前已经阅读了几篇教程,其中有一个脚本如下所示:

javascript:var t;try {t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));}catch(e){t="";}alert(t);
为了使它更简单,以下是可读性更强的代码:

javascript:
      var t;
      try {
        t=((window.getSelection&&window.getSelection()) || (document.getSelection&&document.getSelection()) || (document.selection&&document.selection.createRange&&document.selection.createRange().text));
      }catch(e)
      {
        t="";
      }
      alert(t);
我的当前代码抓取所选文本并发出警报,以便我可以看到捕获的内容。然而,文本的格式对我来说很重要,所以我真正想做的就是抓取文本中的任何HTML。事实上,我认为最好是找出用户在页面中选择的位置,并从所选内容的开始和结束处查找最近的HTML标记,然后获取其中的内容。(因为用户不知道他们是否在选择HTML)

我更习惯于使用JQuery来进行DOM选择,所以目前这有点让我不知所措。(除非您可以将JQuery与bookmarklet一起使用……可以吗?)


有人能帮我吗?(即使只是给我指出正确的方向也很好,我正在做一个爱好学习项目,所以我很高兴自己能想出一些东西。)

将getSelection().getRangeAt(0.cloneContents()的结果附加到一个div,然后获取该div的内部HTML

javascript:(function()%7Bvar%20node%3Ddocument.createElement('div')%3Bnode.appendChild(getSelection().getRangeAt(0).cloneContents())%3Balert(node.innerHTML)%3B%7D)()%3B
如果在GET请求中传递标记,则需要首先对其使用encodeURIComponent()


还请注意,GET请求可能只接受这么多数据。

以下函数将返回一个包含用户选择的HTML的字符串:

function getSelectionHtml() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var container = document.createElement("div");
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                container.appendChild(sel.getRangeAt(i).cloneContents());
            }
            html = container.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    return html;
}
函数getSelectionHtml(){ var html=“”; if(typeof window.getSelection!=“未定义”){ var sel=window.getSelection(); 如果(选择范围计数){ var container=document.createElement(“div”); 对于(变量i=0,len=sel.rangeCount;i 以下是bookmarklet的精简版本:

javascript:(function(){var h="",s,g,c,i;if(window.getSelection){s=window.getSelection();if(s.rangeCount){c=document.createElement("div");for(i=0;i<s.rangeCount;++i){c.appendChild(s.getRangeAt(i).cloneContents());}h=c.innerHTML}}else if((s=document.selection)&&s.type=="Text"){h=s.createRange().htmlText;}alert(h);})()

javascript:(function(){var h=”,s,g,c,i;if(window.getSelection){s=window.getSelection();if(s.rangeCount){c=document.createElement(“div”);for(i=0;ii)如果你真的想在其中使用jQuery,那么请检查:好吧,jQuery是我所熟悉的。但是我想知道,在技术上,jQuery是一个非常小的部分。。。(如果,这是一个很大的如果,我试图做的实际上是非常简单的跨浏览器)。不过,感谢堆,我一定会尝试它!感谢关于编码GET的提示!谢谢!这正是我试图做的:)