【问题标题】:Only one function rather than many that are looking the same?只有一个功能而不是许多看起来相同的功能?
【发布时间】:2013-06-05 13:14:19
【问题描述】:

你好!这是我的问题,我正在使用两种“类型”的 JS 短函数(每个函数 5 行代码),但我必须制作,比如说,每种大约 10 行。这将是总共 100 行非常长的代码......所以我想知道是否有一种简单且非常短的方法来实现它。我对javascript知之甚少,我喜欢大致了解我写的东西。 (如果可能的话,避免使用 JQ,我一个字都听不懂!) 以下是函数:

    function typedepolice() {
    var nodes = document.getElementById('stripid').childNodes;
    var nompolice = document.Selections.police.options[document.Selections.police.selectedIndex].value;
    for(var i=0; i<nodes.length; i++) {
         if (nodes[i].nodeName.toLowerCase() == 'div') {
        nodes[i].style.fontFamily = document.Selections.police.options[document.Selections.police.selectedIndex].value;
         }
    }
}

html 调用:...&lt;select name="police" id="police" size="1" onchange="typedepolice()"&gt;...

function colbandeau() {
    var nodes = document.getElementById('stripid').childNodes;
    var colorFmsg = document.getElementById("colorFmsg").value;
        for(var i=0; i<nodes.length; i++) {
         if (nodes[i].nodeName.toLowerCase() == 'div') {
        nodes[i].style.background = '#' + document.getElementById("colorFmsg").value;
         }
    }
}

html 调用:...&lt;input id="colorFmsg" class="color3" value="FFFFFF" size="5" onchange="colbandeau()"&gt;...

第一个是指下拉选择框的选定选项。 第二个是使用 JSColor 选择的颜色,这是一个用于选择颜色的 JS 插件。 如您所见,它们旨在动态更改 Id 为“stripid”的一个元素的多个 div 子元素的 CSS 属性,并由“onchange”事件调用。

经过长时间的搜索,我在 stackoverflow 的 reply 中找到了这些函数的模式,它们正是我所需要的。为此,我非常感谢 Vijay Agrawal,因为它会大大改善我的网页。

注意:不要害怕,“警察”在法语中的意思是“字体”:)

如果有人可以帮助我,那就太好了!

【问题讨论】:

    标签: javascript function css shortcut


    【解决方案1】:

    您可以创建一个函数来设置stripid 子节点

    function setNodeStyle(value, style) {
        var nodes = document.getElementById('stripid').childNodes;
        for (var i=0; i<nodes.length; i++) {
            if (nodes[i].nodeName.toLowerCase() == 'div') {
                nodes[i].style[style] = value;
            }
        }
    }
    

    然后你可以在其他函数中调用它:

    function colbandeau() {
        setNodeStyle(document.getElementById("colorFmsg").value, "background");
    }
    

    这已经可以为你节省不少了。

    您可以通过设置包含要成为的值的属性来进一步改进这一点。为了让您开始:

    <input class="color3 changer" value="FFFFFF" size="5" data-style="background">
    
    Array.prototype.forEach.call(document.querySelector(".changer"), function (el) {
        el.addEventListener("change", function () {
            setNodeStyles(this.value, this.dataset.style);
        });
    });
    

    【讨论】:

    • 谢谢,我将使用你的第一种方式。它肯定会让我节省时间和线路。也许有一天我会回来看看我是否可以处理你的第二种方式。再次感谢在这里帮助人们!
    • 我又来了! JSColor 只给出颜色的十六进制值,而不是“#”符号。不幸的是,我不知道在哪里以及如何在你的脚本中添加它......你能告诉我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    相关资源
    最近更新 更多