将多个参数传递到单个参数中
pass multiple arguments into a single parameter
我在网上找到了一个脚本,可以显示和隐藏代码片段:
function show(shown, hidden,) {
document.getElementById(shown).style.display='block';
document.getElementById(hidden).style.display='none';
return false;
}
<a href="#" onclick="return show('Page1','Page2');">Page 1</a>
<a href="#" onclick="return show('Page2','Page1');">Page 2</a>
我的问题是,我如何改变它,以包括更多的页面?
我能找到的唯一可行的方法是:
function show(shown, hidden1, hidden2, hidden3) {
document.getElementById(shown).style.display='block';
document.getElementById(hidden1).style.display='none';
document.getElementById(hidden2).style.display='none';
document.getElementById(hidden3).style.display='none';
return false;
}
<a href="" onclick="return show('Page1','Page2','Page3','Page4' );">Page 1</a>
<a href="" onclick="return show('Page2','Page1','Page3','Page4' );">Page 2</a>
<a href="" onclick="return show('Page3','Page1','Page2','Page4' );">Page 3</a>
<a href="" onclick="return show('Page4','Page1','Page2','Page3' );">Page 4</a>
…但是看起来有点乱。那么是否有一种方法可以一次性将3页传递到脚本中的"隐藏"参数中?
谢谢!
可以传递一个数组作为hidden
参数。然后你必须像这样修改你的JS:
function show(shown, hidden ) {
document.getElementById(shown).style.display='block';
for( var i=hidden.length; i--; ) {
document.getElementById(hidden[i]).style.display='none';
}
return false;
}
和HTML看起来像这样:
<a href="" onclick="return show('Page1', ['Page2','Page3','Page4'] );">Page 1</a>
作为一种选择,你可以使用类而不是设置样式。然后,您可以将hidden
参数放在一起:
function show( shown ) {
// remove class 'shownPage' everywhere
var els = document.querySelectorAll( '.shownPage' );
for( var i=els.length; i--; ) {
els.classList.remove( 'shownPage' );
}
// and just add it to the page to show
document.getElementById(shown).classList.add( 'shownPage' );
return false;
}
你可以传递一个数组作为第二个参数,或者甚至使用已经存在的arguments
数组,如object:
function show() {
document.getElementById(arguments[0]).style.display='block';
for(var i=1; i<arguments.length; i++){
document.getElementById(arguments[i]).style.display='none';
}
}
在这段代码中,第一个参数是显示所有其他参数的id。
您可以使用arguments
,传递由Sirko建议的数组,对象或使用选择您选择的所有节点(例如类)的方法,然后只显示您想要的一个
// arguments
function show() {
var i = arguments.length;
if (i > 0) {
while (--i) document.getElementById(arguments[i]).style.display = 'none';
document.getElementById(arguments[0]).style.display = 'block';
}
}
// show('vis_id_1', 'hid_id_1', 'hid_id_2',...)
// object
function show(obj) {
var id;
for (id in obj) {
if (obj.hasOwnProperty(id)) { // safety filter
document.getElementById(id).style.display = obj[id];
}
}
}
// show({'vis_id_1':'block', 'hid_id_1':'none'});
相关文章:
- 如何将Google Analytics配置为将URL参数作为单个页面进行跟踪
- 如何根据URL参数生成包含JS内容的单个HTML文件
- 使用jQuery deffered.resolveWith()在单个参数中传递数组
- 在nodejs中,如何使模块的单个实例具有不同参数的构造函数
- 删除错误.MongooDB + Express.传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符
- 在本地将单个变量传递给具有多个参数的函数的最佳方法是什么
- 将参数转换为数组,但无法访问单个索引
- 当您有集合时,调用接收单个对象作为参数的函数的最佳方法是什么
- 是否可以同时从两个调用函数中调用具有单个参数的同一函数
- 发送单个参数与参数数组
- 我可以强制将参数“res.write”作为单个块发送吗
- 如何在执行ajax请求时删除“_”单个Undercore查询参数
- 如何在进行ajax调用时将所有参数作为单个对象传递
- 如何从document.querySelectorAll中检查单个类参数
- JavaScript函数参数中的单个邀请逗号不起作用
- 传递一个函数,进入一个函数,稍后执行与参数?可能作为单个参数
- 如何在jQuery ajax请求中将多个值作为对象添加到单个参数中
- 在javascript中获取URL中的单个参数
- 向Object()传递单个参数的目的
- 将多个参数传递到单个参数中