★★★★★急!如何遍历一个tag下面的所有tag? 请教高手,在线等待。★★★★★

GHOSTofCPP 2003-05-27 11:16:14
需求如下,编写一个函数,形如
function searchTagWithName(objRoot,strName)
objRoot为Object型,strName为string型
要求遍历objRoot下面的所有tag,返回第一个name==strName的tag的对象。

一定要用递归吗?递归又该怎么写呢?
请教各位高手,最好可以给出代码!

...全文
13 点赞 收藏 9
写回复
9 条回复
fason 2003年05月27日
<script>
function searchTagWithName(objRoot,strName){
return objRoot.all(strName)?objRoot.all(strName)[0].innerText:null
}
</script>
<TABLE id="moonpiazza" border="1">
<TR>
<TD>dsfds</TD>
<TD>dsf</TD>
</TR>
<TR>
<TD>dsfds</TD>
<TD>
<TABLE border="1">
<TR>
<TD><span id="the target">123</span><span id="the target">1223</span></TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD>dsfds</TD>
<TD><span>456</span></TD>
</TR>
</TABLE>

<input type=button onclick="alert(searchTagWithName(moonpiazza,'the target'))">
回复 点赞
fason 2003年05月27日
<script>
function searchTagWithName(objRoot,strName){
return objRoot.getElementsByTagName(strName)?objRoot.getElementsByTagName(strName)[0]:null
}
</script>
回复 点赞
GHOSTofCPP 2003年05月27日
nhconch(海风轻拂——深海螺号,遇水重生)和moonpiazza(月下小生) ( )的函数我都试过了,我这边的返回值始终是null。

我的html可以看成类似这样:
<TABLE id="moonpiazza" border="1">
<TR>
<TD>dsfds</TD>
<TD>dsf</TD>
</TR>
<TR>
<TD>dsfds</TD>
<TD>
<TABLE border="1">
<TR>
<TD><span name = "the target">123</span></TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD>dsfds</TD>
<TD><span>456</span></TD>
</TR>
</TABLE>

然后从table中找出name = "the target"的这个span。
回复 点赞
月光易水 2003年05月27日

<TABLE id="moonpiazza" border="1">
<TR>
<TD>dsfds</TD>
<TD>dsf</TD>
</TR>
<TR>
<TD>dsfds</TD>
<TD>
<TABLE border="1">
<TR>
<TD><span>123</span></TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD>dsfds</TD>
<TD><span>456</span></TD>
</TR>
</TABLE>
<INPUT TYPE="text" NAME="tagName" Id="tagName" value="span">
<INPUT TYPE="button" value="test" onclick="Test()">


<SCRIPT LANGUAGE="JavaScript">
<!--
function searchTagWithName(objRoot,strName)
{
var oItem = objRoot.getElementsByTagName(strName) ;
var n = oItem.length ;
if (n > 0)
{
return oItem[0];
}
else
{
return null;
}
}
function Test()
{
var sStr
var strName = tagName.value ;
if (strName == "")
strName = "span";


var oSrc = searchTagWithName(moonpiazza,strName);
if (oSrc == null)
{
sStr = "tagName:" + strName + " is null!"
}
else
{
sStr = "tagName:" + strName + "\n" ;
sStr += "innerHTML:" + oSrc.innerHTML ;
}
alert(sStr);
}

//-->
</SCRIPT>


:_)
回复 点赞
nhconch 2003年05月27日
function searchTagWithName(objRoot,strName)
{
Result = null;
for (i=0; i<objRoot.length; i++)
{
if (objRoot[i].name==strName)
{
Result = obj[i];
break;
}
else
{
if (Result=searchTagWithName(objRoot[i],strName)) break;
}
}
return Result;
}
回复 点赞
GHOSTofCPP 2003年05月27日
To net_lover(孟子E章):
能不能给一点解释,我的javascript实在不够熟练。谢谢!
回复 点赞
孟子E章 2003年05月27日
obj.childNodes.item(i).tagName
回复 点赞
月光易水 2003年05月27日
不好意思,没有看清题目

问题:
1.不知道tag的名称(tagName)
2.只知道tag的属性name的值
3.获得属性name==strName的对象集合的第一个对象

方法有2:
a.读取所有对象进行循环 searchTagWithName(objRoot,strName)
b.递归读取子节点 searchTagWithName02(objRoot,strName)


<TABLE id="moonpiazza" border="1">
<TR>
<TD>dsfds</TD>
<TD>dsf</TD>
</TR>
<TR>
<TD>dsfds</TD>
<TD>
<TABLE border="1">
<TR>
<TD><span name="the target">123</span></TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD>dsfds</TD>
<TD><span name="test">456</span></TD>
</TR>
</TABLE>
<INPUT TYPE="text" NAME="cName" Id="cName" value="the target">
<INPUT TYPE="button" value="test" onclick="Test(cName.value)">
<BR>
<INPUT TYPE="text" NAME="cName2" Id="cName2" value="test">
<INPUT TYPE="button" value="test" onclick="Test(cName2.value)">

<SCRIPT LANGUAGE="JavaScript">
<!--
function searchTagWithName(objRoot,strName)
{
// 读取所有对象进行循环
// 建议使用
var oChildNodes = objRoot.all ;
var n = oChildNodes.length ;
var i ;
var oRelust = null;

for (i=0; i<n; i++)
{

if (oChildNodes[i].name == strName)
{
return oChildNodes[i] ;
}
}
}

function searchTagWithName02(objRoot,strName)
{
// 递归读取子节点
var oChildNodes = objRoot.childNodes ;
var n = oChildNodes.length ;
var i ;
var oRelust = null;

for (i=0; i<n; i++)
{

if (oChildNodes[i].name == strName)
{
return oChildNodes[i] ;
}
}

for (i=0; i<n; i++)
{
oRelust = searchTagWithName(oChildNodes[i],strName);
if (oRelust != null)
{
return oRelust ;
}
}

return oRelust ;
}




function Test(strName)
{
var sStr
if (strName == "")
strName = "span";


var oSrc = searchTagWithName(moonpiazza,strName);
if (oSrc == null)
{
sStr = "tag属性name:" + strName + " \n"
sStr += "this is null!" ;
}
else
{
sStr = "tag属性name:" + strName + "\n" ;
sStr += "innerHTML:" + oSrc.innerHTML ;
}
alert(sStr);
}
//-->
</SCRIPT>



:_)
回复 点赞
GHOSTofCPP 2003年05月27日
看来是我这里用的有问题,谢谢各位赐教!结贴吧!:)
回复 点赞
发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告