繁体   English   中英

如何避免在JavaScript中重复?

[英]how to avoid repetition in javascript?

如何避免此重复代码? 我是javascript新手。 我需要使用不同的参数(例如100次)调用同一函数,并且还需要使用100种不同的getElementBys

(function() {

    var ok, publicSessionID, sms, a, b, c, d, e, f, g, h, i, j;

    var pubnub = PUBNUB.init({
        subscribe_key: '',
        publish_key: ''
    });


    function getParameterByName(name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
            results = regex.exec(location.search);
        return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
    };

    var publicSessionID = getParameterByName('tv') || 'default';
    var sms = getParameterByName('sms') || 'default';
    var a = document.getElementById("channel1");
    var b = document.getElementById("channel2");
    var c = document.getElementById("channel3");


    d.onclick = function() {
        pubnub.publish({
            channel: publicSessionID,
            message: {
                "action": "tv.new.channel.4"
            }
            uuid: sms,
            callback: function(info) {
                console.log(JSON.stringify(info));
            }
        })
        return false;
    };

    e.onclick = function() {
        pubnub.publish({
            channel: publicSessionID,
            message: {
                "action": "tv.new.channel.5"
            }
            uuid: sms,
            callback: function(info) {
                console.log(JSON.stringify(info));
            }
        });
        return false;
    };

    f.onclick = function() {
        pubnub.publish({
            channel: publicSessionID,
            message: {
                "action": "tv.new.channel.6"
            }
            uuid: sms,
            callback: function(info) {
                console.log(JSON.stringify(info));
            }
        });
        return false;
    };
})()

var a,通过z会重复,而a.onclick = function(){}会重复,在js中有什么更有效的方法吗?

谢谢

function pubnub (channel) {
    pubnub.publish({
        channel : publicSessionID,
        message : {"action": "tv.new.channel.5"} //use channel here
            uuid : sms ,
            callback : function(info) {
            console.log(JSON.stringify(info));
        }           
    });     
    return false;
}; 

只需将其设为带有通道参数的函数,然后像调用它一样

e.onclick = function() { pubnub(5); }

请注意, onclick仅允许一个事件,因此请考虑使用addEventListener

编写一个函数生成器,

function generatorFunction(channel) {
    return function() {
        pubnub.publish({
            channel: publicSessionID,
            message: {
                "action": channel
            }
            uuid: sms,
            callback: function(info) {
                console.log(JSON.stringify(info));
            }
        });
        return false;
    }
};

并以channel作为参数调用它,以使用指定的channel获得新功能

for (var i = 1; i <= 26; i += 1) {
    var currentChannel = document.getElementById("channel" + i);
    currentChannel.onclick = generatorFunction("tv.new.channel." + i);
}

您似乎可以利用此处的命名约定来避免对getElementById键入100个调用。

var elements = [];
for(var i = 0; i < 100; i++){
  var e = document.getElementById("channel" + i);
  elements.push(e); 
}

您可以在元素上使用类,例如您添加class='channels' 你可以做这样的事情,

var channels = document.querySelectorAll(".channels");

for (var i = 0;  i < channels.length; i++) {
    var ch = channels[i]
    , ch_num = i

    ch.addEventListener('click', function () {
        pubnub.publish({
            channel: publicSessionID,
            message: {
                "action": "tv.new.channel." + i
            } //use channel here
            uuid: sms,
            callback: function (info) {
                console.log(JSON.stringify(info));
            }
        });
        return false;
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM