JavaScript 递归查找容器内含指定关键字 ID 的控件

作者:竹影时间:2026-10-25 14:28:00浏览:590

本文介绍在 JavaScript 中如何递归遍历 DOM 容器,查找 ID 包含特定关键字的控件。提供了三个版本的实现:初始版本按标签名过滤并返回逗号分隔的 ID 字符串;改进版移除标签限制,仅通过 ID 关键字匹配;最终版直接返回匹配的控件数组对象。代码包含完整的递归逻辑,适用于 GridView 等复杂嵌套结构的元素定位。

基于标签名的 ID 关键字查找实现

实现一个功能,用于获取指定容器控件中所有 ID 包含特定字符串的子控件 ID 列表。


该函数接收三个参数:容器控件对象、需要匹配 ID 的关键字字符串,以及可选的控件标签名称。


函数执行后返回一个字符串,内容为所有查找到的控件 ID,各 ID 之间以逗号分隔。


具体实现代码如下:

 
function GetIdListBySubKey(container,subKey,TagName)
{ 
var idList = "";
for(var i = 0; i < container.childNodes.length;i++)
{ 
if(container.childNodes[i].nodeName == TagName && container.childNodes[i].id.indexOf(subKey) > -1)
{ 
idList += container.childNodes[i].id + ",";
} 
if(container.childNodes[i].childNodes.length > 0)
{ 
idList += GetIdListBySubKey(container.childNodes[i],subKey,TagName)
} 
} 
return idList;
} 

此方法可用于获取 GridView 等复杂容器中的控件。


移除标签限制的简化版实现

对代码进行改进:可以去掉 TagName 参数,使查找范围更广。


改进后的功能描述:获取某容器控件中 ID 包含某字符串的控件 ID 列表。


改进后的参数为:容器控件、要查找的控件的 ID 关键字。


返回值仍为查找到的控件 ID 列表字符串,以逗号分割。


改进后的代码如下:

 
function GetIdListBySubKey(container,subIdKey)
{ 
var idList = "";
for(var i = 0; i < container.childNodes.length;i++)
{ 
if(container.childNodes[i].attributes != null && container.childNodes[i].attributes["id"] != undefined && container.childNodes[i].id.indexOf(subIdKey) > -1)
{ 
idList += container.childNodes[i].id + ",";
} 
if(container.childNodes[i].childNodes.length > 0)
{ 
idList += GetIdListBySubKey(container.childNodes[i],subIdKey)
} 
} 
return idList;
} 

调用示例:GetIdListBySubKey(document,"txt_Money")


直接返回控件数组的最终版本

进一步改进:直接返回控件数组,而非 ID 字符串,便于后续操作。


改进后的功能描述:获取某容器控件中 ID 包含某字符串的控件数组。


改进后的参数为:容器控件、要查找的控件的 ID 关键字。


返回值改为查找到的控件数组对象。


最终版本的代码如下:

 
function GetConListBySubKey(container,subIdKey)
{ 
var reConArry = [];
for(var i = 0; i < container.childNodes.length;i++)
{ 
if(container.childNodes[i].attributes != null && container.childNodes[i].attributes["id"] != undefined && container.childNodes[i].id.indexOf(subIdKey) > -1)
{ 
reConArry.push(container.childNodes[i]);
} 
if(container.childNodes[i].childNodes.length > 0)
{ 
var re = GetConListBySubKey(container.childNodes[i],subIdKey)
for(var k = 0;k<re.length;k++)
{ 
reConArry.push(re[k]);
} 
} 
} 
return reConArry;
} 
作者最新文章