日期:2014-05-17  浏览次数:20662 次

关于js代码。。。
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";

这是点击复选框使之变色的代码,可以用,但是实在不是太明白。。。希望高手解释一下

------解决方案--------------------
好歹说下你是哪段没看懂。。。

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存在,说明已经变色过了,就删除该颜色属性;否则设置变色。


------解决方案--------------------
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。
------解决方案--------------------
探讨
万分感激!!!
再问一下,strTagName是用于做什么的?还有touppercase()不是用来转换成大写字母的吗?