javascript中函数的含义是什么?

时间:2011-02-25 02:27:05

标签: javascript

  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的新手。所以无法理解上述两个功能。期待有人可以逐一解释这条线对我的意义。非常感谢。

3 个答案:

答案 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);">