在 javascript 小书签中创建 close me link 时出现问题
Problems creating close me link in javascript bookmarklet
我正在尝试向此功能添加一个 close me link。它的工作方式是将所有这些不带换行符的代码粘贴到书签中,书签会在屏幕上显示一个蓝色框。
这是我目前所拥有的,关闭我 link 我创建的是我创建的 "eleCloseLink" 节点:
javascript:(
function(){
var pagebody = document.evaluate( '/html/body' ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
if (pagebody != null) {
var node = document.createElement("DIV");
node.style.position="fixed";
node.style.color="white";
node.style.background="blue";
node.style.width="350px";
node.style.top="50px";
node.innerHTML = "<br>BLUE BOX<br>2<br>";
var box = pagebody.appendChild(node);
/* Creating close link here */
var eleCloseLink = document.createElement("a");
eleCloseLink.setAttribute('href', 'javascript:( function(){ node.parentNode.removeChild(node); })();');
eleCloseLink.innerHTML = 'close me';
box.appendChild(eleCloseLink);
}
})();
到目前为止,我已经尝试了大约 10 种不同的方法,并且 none 都成功了。最近的方法是将 javascript:( function(){ node.parentNode.removeChild(node); })();
放在 a 中,但这也不起作用。我觉得这应该是最常见的代码之一,因为我经常在网站上看到它们,因此应该有很多信息。我的场景可能比大多数情况更具体 b/c 我正在创建的框只是一个 DIV 元素,我实际上是在尝试删除 DIV 元素(我尝试将其用作好吧)与我亲密 link。如果有人对如何创建此关闭我有任何建议,请告诉我 link。
为了解决这个问题,我创建了一个点击事件侦听器,它调用了一个函数来移除对象。为此,我向试图删除的 DIV 对象添加了 id 属性。当点击事件被触发时,close 函数然后通过 id 属性使用 XPATH 引用评估 div 对象。然后我能够 运行 该对象上的 remove() 方法。
结尾片段:
/*Create Link in box to close box*/
var eleCloseLink = document.createElement("a");
eleCloseLink.innerHTML = '|CLOSE|';
eleCloseLink.addEventListener("click", CloseBox, false);
eleCloseLink.background = 'red';
box.appendChild(eleCloseLink);
}
/*Function to close the box */
function CloseBox() {
document.evaluate( "//*[@id='thebox']" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.remove(this);
}
仍然不完全确定我是否必须在 remove() 方法中使用 "this",因为我在对象本身上调用 remove() 方法。然而,这现在正在工作。
我正在尝试向此功能添加一个 close me link。它的工作方式是将所有这些不带换行符的代码粘贴到书签中,书签会在屏幕上显示一个蓝色框。
这是我目前所拥有的,关闭我 link 我创建的是我创建的 "eleCloseLink" 节点:
javascript:(
function(){
var pagebody = document.evaluate( '/html/body' ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
if (pagebody != null) {
var node = document.createElement("DIV");
node.style.position="fixed";
node.style.color="white";
node.style.background="blue";
node.style.width="350px";
node.style.top="50px";
node.innerHTML = "<br>BLUE BOX<br>2<br>";
var box = pagebody.appendChild(node);
/* Creating close link here */
var eleCloseLink = document.createElement("a");
eleCloseLink.setAttribute('href', 'javascript:( function(){ node.parentNode.removeChild(node); })();');
eleCloseLink.innerHTML = 'close me';
box.appendChild(eleCloseLink);
}
})();
到目前为止,我已经尝试了大约 10 种不同的方法,并且 none 都成功了。最近的方法是将 javascript:( function(){ node.parentNode.removeChild(node); })();
放在 a 中,但这也不起作用。我觉得这应该是最常见的代码之一,因为我经常在网站上看到它们,因此应该有很多信息。我的场景可能比大多数情况更具体 b/c 我正在创建的框只是一个 DIV 元素,我实际上是在尝试删除 DIV 元素(我尝试将其用作好吧)与我亲密 link。如果有人对如何创建此关闭我有任何建议,请告诉我 link。
为了解决这个问题,我创建了一个点击事件侦听器,它调用了一个函数来移除对象。为此,我向试图删除的 DIV 对象添加了 id 属性。当点击事件被触发时,close 函数然后通过 id 属性使用 XPATH 引用评估 div 对象。然后我能够 运行 该对象上的 remove() 方法。
结尾片段:
/*Create Link in box to close box*/
var eleCloseLink = document.createElement("a");
eleCloseLink.innerHTML = '|CLOSE|';
eleCloseLink.addEventListener("click", CloseBox, false);
eleCloseLink.background = 'red';
box.appendChild(eleCloseLink);
}
/*Function to close the box */
function CloseBox() {
document.evaluate( "//*[@id='thebox']" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.remove(this);
}
仍然不完全确定我是否必须在 remove() 方法中使用 "this",因为我在对象本身上调用 remove() 方法。然而,这现在正在工作。