function findParentObj(obj,strTagName,strId)
{
 while (obj&&!(!strTagName||obj.tagName==strTagName.toUpperCase())&&(!strId || obj.id == strId))
{
  obj = obj.parentElement; 
 }
 return obj;
}
 var srcElem = findParentObj(event.srcElement, "TR");
 srcElem.runtimeStyle.backgroundColor?srcElem.runtimeStyle.removeAttribute("backgroundColor"):srcElem.runtimeStyle.backgroundColor="#9F79EE";这是点击复选框使之变色的代码,可以用,但是实在不是太明白希望高手解释一下

解决方案 »

  1.   

    好歹说下你是哪段没看懂findParentObj()
    循环查找复选框的父祖节点,直到找到符合“strTagName”的,这个例子里面是 TR,也就是行;var srcElem = findParentObj(event.srcElement, "TR");
    找到事件发生元素(也就是复选框自己了)的某个TR父节点srcElem.runtimeStyle.backgroundColor?srcElem.runtimeStyle.removeAttribute("backgroundColor"):srcElem.runtimeStyle.backgroundColor="#9F79EE";
    三元表达式: (表达式1?表达式2:表达式3)  意思是表达式1成立,就执行2,否则执行3
    其实很简单,如果backgroundColor存在,说明已经变色过了,就删除该颜色属性;否则设置变色。
      

  2.   

    谢谢,但是那个while循环里的内容还是不太明白
      

  3.   

    while (obj&&!(!strTagName||obj.tagName==strTagName.toUpperCase())&&(!strId || obj.id == strId)) {
      obj = obj.parentElement;  
    }不就是几个条件么obj  避免为null情况
    !strTagName  strTagName不能为空
    obj.tagName==strTagName.toUpperCase()  取得该对象标签名(TR)作匹配
    strId  避免为null情况
    obj.id == strId  找到特定节点ID(本例子里面根本没传ID)也就是这个while提供两种查找父祖节点方式,一种是按标签名,另一种是按ID。
      

  4.   

    万分感激!!!
    再问一下,strTagName是用于做什么的?还有touppercase()不是用来转换成大写字母的吗?
      

  5.   


    你自己完全没看代码么?
    定义:function findParentObj(obj,strTagName,strId)
    调用:findParentObj(event.srcElement, "TR");
    strTagName == "TR" 也就是用来找HTML中的<TR>标签的啊。toUpperCase()转为大写字母,这里只为了防止外面调用时写的是 "tr"