我在写一个匹配元素的函数时碰到了一个很奇怪的问题 请大家帮我看看
我写得函数如下:
//@id(String) : 需要查找的容器对象的id
//@return(Mix) : 匹配的对象或空值
function $(id){
return document.getElementById(id);
}
//@obj(DOM Object) : 需要查找的容器对象
//@tag(String) : 标记名
//@pattern(Array) : 属性和值匹配的关联数组
//@return(Array) : 匹配的所有对象
function $gElements(obj, tag, pattern){
var eles = obj.getElementsByTagName(tag);
var result = new Array();
for(var i = 0;i < eles.length;i ++){
var status = true;
for(var j in pattern){
if(null === eles[i][j]){
status = false;
break;
}
if(null === eles[i][j].match(pattern[j])){
status = false;
break;
}
}
if(status){
result[i] = eles[i];
}
}
return result;
}
//@id(String) : 需要查找的容器对象的id
//@tag(String) : 标记名
//@pattern(Array) : 属性和值匹配的关联数组
//@return(Mix) : 匹配的所有对象或空值
function $gElementsById(id, tag, pattern){
var obj = $(id);
if(null == pattern){
pattern = new Array();
}
if(obj){
return $gElements(obj, tag, pattern);
}
return null;
}
然后我用这些函数处理一个表格的时候结果就很奇怪了
表格如下:
<table id="fileList">
<tr id="listTitle">
<td>Name</td>
<td>R/W/E</td>
<td>Type</td>
<td>aTime</td>
<td>cTime</td>
<td>mTime</td>
<td>Group</td>
<td>Owner</td>
<td>Select</td>
</tr>
<form action="/" method="get">
<tbody id="listData">
<tr id="row_0" class="dataRow">
<td class="col_0">1</td>
<td class="col_1">2</td>
<td class="col_2">3</td>
<td class="col_3">4</td>
<td class="col_4">5</td>
<td class="col_5">6</td>
<td class="col_6">7</td>
<td class="col_7">8</td>
<td class="col_8"><input type="checkbox" name="row[]" value="1" /></td>
</tr>
<tr id="row_1" class="dataRow">
<td class="col_0">1</td>
<td class="col_1">2</td>
<td class="col_2">3</td>
<td class="col_3">4</td>
<td class="col_4">5</td>
<td class="col_5">6</td>
<td class="col_6">7</td>
<td class="col_7">8</td>
<td class="col_8"><input type="checkbox" name="row[]" value="2" /></td>
</tr>
<tr id="row_2" class="dataRow">
<td class="col_0">1</td>
<td class="col_1">2</td>
<td class="col_2">3</td>
<td class="col_3">4</td>
<td class="col_4">5</td>
<td class="col_5">6</td>
<td class="col_6">7</td>
<td class="col_7">8</td>
<td class="col_8"><input type="checkbox" name="row[]" value="3" /></td>
</tr>
<tr id="row_3" class="dataRow">
<td class="col_0">1</td>
<td class="col_1">2</td>
<td class="col_2">3</td>
<td class="col_3">4</td>
<td class="col_4">5</td>
<td class="col_5">6</td>
<td class="col_6">7</td>
<td class="col_7">8</td>
<td class="col_8"><input type="checkbox" name="row[]" value="4" /></td>
</tr>
<tr id="row_a" class="dataRow">
<td class="col_0">1</td>
<td class="col_1">2</td>
<td class="col_2">3</td>
<td class="col_3">4</td>
<td class="col_4">5</td>
<td class="col_5">6</td>
<td class="col_6">7</td>
<td class="col_7">8</td>
<td class="col_8"><input type="checkbox" name="row[4]" value="5" /></td>
</tr>
</tbody>
</form>
</table>
我在后面使用自己写的函数:
var pattern = {
"id" : /^row_\d+/,
"className" : /^dataRow$/
}
var list = $gElementsById("fileList", "tr", pattern);
for(var i in list){
document.writeln(list[i].id);
}
alert(list.length);
结果如我上传得图片 为什么明明获取了4个对象却长度等于5