Javascript Bookmarklet,用于捕获选定内容,包括html标记
我正在构建一个JS bookmarklet,它允许我捕获用户在浏览器中选择的文本,并将其发送到web应用程序。我目前已经阅读了几篇教程,其中有一个脚本如下所示: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
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;ijavascript:(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的提示!谢谢!这正是我试图做的:)