【问题标题】:Randomize letter color in javascriptjavascript中的随机字母颜色
【发布时间】:2017-06-08 00:50:20
【问题描述】:

我正在尝试创建一个脚本,为我网站上“p”标签内的每个字母提供随机颜色。着色部分工作正常,问题是我的脚本覆盖了“br”和“a”标签。有什么解决方法吗?

到目前为止,这是我的代码:

function changeColor() {
    var paragraphs = document.getElementsByTagName("p");
   
    for(var i = 0; i < paragraphs.length; i++)
    {
        var innerText = paragraphs[i].innerText;
        var innerTextSplit = innerText.split("");
        paragraphs[i].innerText = ""
       
        for(var j = 0; j < innerTextSplit.length; j++) {
            var randomColor = "rgb(" + Math.floor((Math.random() * 255) + 1) + ", " + Math.floor((Math.random() * 255) + 1) + ", " + Math.floor((Math.random() * 255) + 1) + ");"
 
            innerTextSplit[j] = '<span style="color: ' + randomColor + '">' + innerTextSplit[j] + '</span>';
            paragraphs[i].innerHTML += innerTextSplit[j];
        }
    }
}

非常感谢任何帮助,在此先感谢:)

-jAndersen

【问题讨论】:

    标签: javascript random colors letter


    【解决方案1】:

    请在sn-p下面找到一个函数getRandomColor()用于生成随机颜色的六进制代码

    $(function(){
    changeColor();
    });
    
    function changeColor() {
        var paragraphs = document.getElementsByTagName("p");
       
        for(var i = 0; i < paragraphs.length; i++)
        {
            var innerText = paragraphs[i].innerText;
            var innerTextSplit = innerText.split("");
            paragraphs[i].innerText = ""
           
            for(var j = 0; j < innerTextSplit.length; j++) {
                var randomColor =getRandomColor();
     
                innerTextSplit[j] = '<span style="color: ' + randomColor + '">' + innerTextSplit[j] + '</span>';
                paragraphs[i].innerHTML += innerTextSplit[j];
            }
        }
    }
    
    function getRandomColor() {
        var letters = '0123456789ABCDEF';
        var color = '#';
        for (var i = 0; i < 6; i++ ) {
            color += letters[Math.floor(Math.random() * 16)];
        }
        return color;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <p>geloosmsd</p>
    <p>geloosmsd</p>
    <p>geloosmsd</p><p>geloosmsd</p><p>geloosmsd</p><p>geloosmsd</p><p>geloosmsd</p><p>geloosmsd</p><p>geloosmsd</p><p>geloosmsd</p><p>geloosmsd</p><p>geloosmsd</p>

    【讨论】:

    • 哦,那是制作十六进制代码的绝妙解决方案,我什至没有想过这样做。但是,它不能解决在 p 标记中重新着色断线标记(如果存在)的问题。但是有一个问题,你为什么要使用 jquery 来启动函数?,这不应该是必要的
    【解决方案2】:

    不优雅,但试试:

    function changeColor() {
    var paragraphs = document.getElementsByTagName("p");
    
    for(var i = 0; i < paragraphs.length; i++)
    {
        var innerText = paragraphs[i].innerHTML;
        var innerTextSplit = innerText.split("");
        paragraphs[i].innerText = "";
    
        var isHTMLElement = false;
    
        for(var j = 0; j < innerTextSplit.length; j++) {
            if(innerTextSplit[j] == "<")
              isHTMLElement = true;
    
            if(!isHTMLElement){
              var randomColor = "rgb(" + Math.floor((Math.random() * 255) + 1) + ", " + Math.floor((Math.random() * 255) + 1) + ", " + Math.floor((Math.random() * 255) + 1) + ");"
              innerTextSplit[j] = '<span style="color: ' + randomColor + '">' + innerTextSplit[j] + '</span>';
            }
    
            if(innerTextSplit[j] == ">")
                isHTMLElement = false;
    
        }
    
        innerTextSplit = innerTextSplit.join('');
        paragraphs[i].innerHTML += innerTextSplit;
    }
    }
    

    【讨论】:

    • 感谢您的解决方案!它不仅有效,还解决了当您再次按下按钮时脚本也会尝试解析跨度标签的浏览器崩溃问题。太棒了!
    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2012-05-30
    • 2011-05-29
    • 2021-10-08
    相关资源
    最近更新 更多