[英]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.