function ExChgClsName(Obj,NameA,NameB){
var Obj=document.getElementById(Obj)?document.getElementById(Obj):Obj;
Obj.className=Obj.className==NameA?NameB:NameA;
}
<a href="javascript:showMenu(2);">
我是js的新手。所以无法理解上述两个功能。期待有人可以逐一解释这条线对我的意义。非常感谢。
答案 0 :(得分:4)
第一个功能
var Obj=document.getElementById(Obj)?document.getElementById(Obj):Obj;
如果Obj
是一个字符串,即DOM元素的ID,则第一行按其ID获取对象。否则它只留下Obj
的值。这是使用“三元条件”运算符a? b: c
。如果b
是真实的,则a
的值为c
,否则为 Obj.className=Obj.className==NameA?NameB:NameA;
。这样做允许函数接受字符串或DOM元素。
NameB
如果DOM元素的CSS类为NameA
,则下一行将DOM元素的CSS类从最后一行设置为NameA
,否则将其设置为NameA
。只要另一个类从未分配给该元素,这将具有交换类的效果。如果另一个类 分配给该元素,那么它将使用function showMenu(iNo){
ExChgClsName("Menu_"+iNo,"MenuBox","MenuBox2");
}
再次开始循环。
"Menu_"+iNo
第二个函数只应用第一个函数在“MenuBox”和“MenuBox2”之间交换ID为 var Obj = document.getElementById(Obj) || Obj;
的DOM元素的CSS类。
就个人而言,我不喜欢第一个函数的第一行,因为当它只需要执行一个时,它会对DOM进行两次搜索。我会这样做
||
这应该在所有实现上更有效,并且肯定更具可读性。只有当Obj
返回document.getElementById
时,它才会使用null
运算符作为后卫,将{{1}}分配回自身。
答案 1 :(得分:0)
将对象上的级联样式表类名从A转换为B
找到元素
如果对象的css类名是nameA,则将其设置为nameB,否则,将其设置为nameA
答案 2 :(得分:0)
function ExChgClsName(Obj,NameA,NameB){
//ternary operator, sets Obj = the dom object with id = 1st agrument if it exists
//you can get away with this because an object is "truthy" in javascript
// truthy meaning that if you try to evaluate it as a boolean it is the same as true
// if nothing is found getElementById returns null wich is the same as false
var Obj=document.getElementById(Obj)?document.getElementById(Obj):Obj;
//ternary operator again. changes the class of the dom object to the 3rd argument
//if its class is already the 2nd argument
//otherwise it changes it to the second argument
Obj.className=Obj.className==NameA?NameB:NameA;
}
function showMenu(iNo){
//calls exChgCLsName with the specified arguments
ExChgClsName("Menu_"+iNo,"MenuBox","MenuBox2");
}
// Runs the showMenu function when clicked
<a href="javascript:showMenu(2);">