这是我之前的问题的后续跟进。我尝试使用Greasemonkey将<td>
中的文本更改为包含该文本的链接。
所以页面包含
<td class="something"><div style="width: 200px;">
randomtext
</div></td>
我想使用Greasemonkey将其更改为:
<td class="something"><div style="width: 200px;">
<a href="www.somewhere.com/q?=randomtext">randomtext</a>
</div></td>
到目前为止,我已将这些代码拼凑在一起,但我确定这是错误的做法,因为我没有到达任何地方:
// ==UserScript==
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==
(function() {
var reference = document.getElementsByTagName('something')
var replacement = reference.replace(reference, "www.somewhere.com/q?=" + reference)
document.getElementById("user-reference-value").innerHTML = replacement;
})();
我还需要做些什么来完成这项工作?
答案 0 :(得分:1)
忘记jQuery,它只会减慢你的页面速度。 我还没有真正测试过这段代码,但它应该可以用于一些调试:
// ==UserScript==
// ==/UserScript==
(function() {
// collect variables
// you can change this to change which element you replace
var reference = document.querySelector('td.something>div:first-child');
var text = reference.innerText;
var replacement = text.replace(reference, "www.somewhere.com/q?=" + reference);
// create new anchor tag
var a = document.createElement('a');
a.href = replacement;
a.innerText = text;
// do the replacement
reference.innerHTML = ''; // clear the old contents of the reference
reference.appendChild(a); // append the new anchor tag into the element
})();
答案 1 :(得分:0)
这是Greasemonkey脚本的一个相当标准的操作。 jQuery's .wrapInner()
Doc和waitForKeyElements()
Example让您轻松自如。
您的完整脚本如下所示:
// ==UserScript==
// @name _Select text (re)linker
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
waitForKeyElements (".something > div", linkifyText);
function linkifyText (jNode) {
jNode.wrapInner ( function () {
var newHref = 'http:\/\/www.somewhere.com\/q?='
+ encodeURIComponent (this.textContent.trim () );
//-- Note that link text will be filled in automatically.
var newLink = '<a href="' + newHref + '"></a>';
return newLink;
} );
}