1

我想使用 Greasemonkey 为 Firefox 做一个Greentext插件,但没有 jQuery。

这是我所做的:

<head>
<script type="text/javascript">
    function highlight() {
        var elm = document.getElementsByClassName("mainWrapper");

        for(i = 0; i < elm.length; i++)
        {
            elm[i].innerHTML.replace(">","pony");
        }
    }

    alert("PONY");
</script>
</head>

<body onload="highlight()">
<div class="mainWrapper"><span class="noob"> > N00b </span>
</div>
</body>

这是该功能的测试版本,我这样做是因为我认为问题出在 Greasemonkey,但它还没有工作。

你能帮助我吗?我不太擅长编程,也不知道如何很好地在 JS 上编写脚本。

4

2 回答 2

2

对于这样的事情,您只需要处理页面的文本部分——这样 HTML(和任何附加的 JS)就不会被破坏。

所以(1)不要使用innerHTML,(2)代码最好使用一种称为递归的技术来有效地解析节点。

另请注意,>可以编码为>or &gt;(也可能是一些更罕见的方法)。

这是一个完整的 Greasemonkey 脚本,可以进行这种搜索和替换:

// ==UserScript==
// @name        _Replace HTML-sensitive text
// @include     http://YOUR_SERVER.COM/YOUR_PATH/*
// @include     http://fiddle.jshell.net/DJLEq/*
// @grant       none
// ==/UserScript==

var targElements    = document.querySelectorAll ("div.mainWrapper");

for (var J = targElements.length - 1;  J >= 0;  --J) {
    repGreaterWithPonies (targElements[J] );
}

function repGreaterWithPonies (node) {
    if (node.nodeType === Node.TEXT_NODE) {
        // YOUR CUSTOM REPLACE GOES HERE.
        node.nodeValue  = node.nodeValue.replace (/>|&gt;/ig, "pony");
    }
    else if (node.nodeType === Node.ELEMENT_NODE) {
        for (var K = 0, numNodes = node.childNodes.length;  K < numNodes;  ++K) {
            repGreaterWithPonies (node.childNodes[K] );
        }
    }
}


安装该脚本,您可以在此页面上看到它:fiddle.jshell.net/DJLEq/...

于 2012-10-23T20:45:23.763 回答
0

这个问题并不完全清楚,但是查看您的代码,您似乎想要执行以下操作:

<head>
  <script type="text/javascript">
   function highlight() {
    var elm = document.getElementsByClassName("mainWrapper");
    for(i = 0; i < elm.length; i++)             
    {                        
      elm[i].innerText = elm[i].innerText.replace(">","pony");          
    }      
   } 
 </script>
</head>
<body onload="highlight()">
<div class="mainWrapper">><span class="noob"> N00b </span> 
</div>
</body>​

例子

于 2012-10-23T19:33:26.230 回答