Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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
如何使用greasemonkey和javascript将页面上每个字母的颜色更改为随机选择的颜色?_Javascript_Greasemonkey - Fatal编程技术网

如何使用greasemonkey和javascript将页面上每个字母的颜色更改为随机选择的颜色?

如何使用greasemonkey和javascript将页面上每个字母的颜色更改为随机选择的颜色?,javascript,greasemonkey,Javascript,Greasemonkey,所以我读了一些类似的问题,我已经设法做了一些事情,比如改变背景颜色,但我还没能让它起作用 我想要的是,页面上的每个后续字母都随机着色。所使用的颜色空间并不重要,因为一旦它真正起作用,就很容易修复(我现在正在使用一个),但我甚至还不能让文本改变颜色。我希望我只是在某个地方犯了个愚蠢的错误 这就是我目前正在尝试的;它可以工作,但这取决于我使用的标记名,而且由于大多数网页的性质,如果我不小心,它会破坏很多东西 var elements=document.getElementsByTagName('p

所以我读了一些类似的问题,我已经设法做了一些事情,比如改变背景颜色,但我还没能让它起作用

我想要的是,页面上的每个后续字母都随机着色。所使用的颜色空间并不重要,因为一旦它真正起作用,就很容易修复(我现在正在使用一个),但我甚至还不能让文本改变颜色。我希望我只是在某个地方犯了个愚蠢的错误

这就是我目前正在尝试的;它可以工作,但这取决于我使用的标记名,而且由于大多数网页的性质,如果我不小心,它会破坏很多东西

var elements=document.getElementsByTagName('p');

对于(var i=0,l=elements.length;i要做到这一点,您只需要递归文本节点,小心不要丢弃子HTML元素

var x=document.querySelector(“body”);//等等。
buggerTextNodesIn(x);
函数buggerTextNodesIn(节点){
var wrapClass='gmColorBarf';
函数turnerizeTextNodes(节点){
if(node.nodeType===node.TEXT\u节点){
//---如果已包装此节点,则跳过此节点。
如果(!node.parentNode.classList.contains(wrapClass)){
var oldText=node.nodeValue;
var parent=node.parentNode;
对于(变量J=0,len=oldText.length;J=0;--K){
turnerizeTextNodes(node.childNodes[K]);
}
}
}
turnerizeTextNodes(节点);
}
函数getRandomColor(){
变量字母='0123456789ABCDEF'。拆分('');
var color='#';
对于(var J=0;J<6;++J){
颜色+=字母[Math.round(Math.random()*15)];
}
返回颜色;
}



请注意,要获取iframe内容,最简单的方法是调整要在iframe URL上触发的
@include
@exclude
和/或
@match
指令--如果他们还没有。

如果你想在一个长而复杂的页面上这样做,那么你所要求的将是困难的。如果你尝试这样的事情,有一些元素和子元素会断裂。我建议你只在
标记上尝试更改字母颜色。@David我意识到在
上使用它完全是不可能的,很多页面都使用
进行格式化,而且嵌套的太多了。
,那么它是如何工作的呢?好吧,这在JSFIDLE中似乎工作得非常好,但当我把它放在greasemonkey中时就完全不行了(或者至少它们在chrome上的TamperMonkey中不工作,它声称是一样的…).你知道我该怎么做吗?这在脚本、FF上的Greasemonkey、Chrome上的Tampermonkey和Chrome上的纯内容脚本中都能很好地工作。只要仔细检查一下就可以了。链接或发布你尝试过的确切脚本。你的目标页面使用框架、iFrame、flash或AJAX吗?链接到目标页面。啊,太棒了,我想我必须这样做我刚刚做错了什么!!谢谢…我会好好利用这个。。。
var elements = document.getElementsByTagName('p');
for(var i=0,l=elements.length;i<l;++i) {

    var str = elements[i].textContent;
    elements[i].innerHTML = '';

    for(var j=0,ll=str.length;j<ll;++j) {
        var n = document.createElement('span');
        elements[i].appendChild(n);
        n.textContent = str[j];
        n.style.color = get_random_colour();
    }
}
function get_random_colour() {
    var letters = '0123456789ABCDEF'.split('');
    var colour = '#';
    for (var i = 0; i < 6; i++ ) {
        colour += letters[Math.round(Math.random() * 15)];
    }
    return colour;
}​
var x  = document.querySelector ("body"); // Etc.
buggerTextNodesIn (x);

function buggerTextNodesIn (node) {
    var wrapClass   = 'gmColorBarf';

    function turnerizeTextNodes (node) {
        if (node.nodeType === Node.TEXT_NODE) {
            //--- Skip this node if it's already been wrapped.
            if ( ! node.parentNode.classList.contains (wrapClass) ) {
                var oldText = node.nodeValue;
                var parent  = node.parentNode;

                for (var J = 0, len = oldText.length;  J < len;  ++J) {
                    var wrapSpan    = document.createElement ("span");
                    wrapSpan.classList.add (wrapClass);
                    wrapSpan.textContent = oldText[J];
                    wrapSpan.style.color = getRandomColor ();

                    parent.insertBefore (wrapSpan, node);
                }
                parent.removeChild (node);
            }
        }
        else if (node.nodeType === Node.ELEMENT_NODE) {
            /*--- IMPORTANT! Start "bottom up" since we will be adding
                gazillions of nodes and "top down" would skew our length measurement.
            */
            for (var K = node.childNodes.length - 1;  K >= 0;  --K) {
                turnerizeTextNodes (node.childNodes[K] );
            }
        }
    }

    turnerizeTextNodes (node);
}


function getRandomColor () {
    var letters = '0123456789ABCDEF'.split ('');
    var color   = '#';
    for (var J = 0;  J < 6; ++J) {
        color += letters[Math.round(Math.random() * 15)];
    }
    return color;
}