日期:2014-05-16  浏览次数:20375 次

求解!如何在一段HTML代码中定位一个标签?
一段HTML代码:
var str = "aaaa<span>bbbb</span>00000<span>111<span>222<span class="6">333<span>444</span>333<span>ccccc</span>333</span>222</span>111</span>00000";

里面包含不确定数量的<span> </span> 标签(而且有的互相嵌套);
请问如何找到与 <span class="xxx"> 闭合的那个 </span>
这个我记得以前有过解决方法,大体是用 indexOf 循环查找,不过效率不高。
有没有更高效的办法呢?

------解决方案--------------------
步骤

1.引用getElementsByClass的函数

if(!getElementsByClass){var getElementsByClass=function(searchClass,node,tag){
var classElements=new Array();
if (!node){node=document;}
if (!tag){tag='*';}
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)");
for(var i = 0,j = 0; i < elsLen; i++) {
if( pattern.test(els[i].className)){classElements[j] = els[i];j++;}
}
return classElements;
};}


2.创建一个DIV,并插入值
var d=document.createElement("div");
d.innerHTML=str;

3.取到class="xxx"的ELEMENT

var spans=getElementsByClass("xxx",d,"span")
alert(spans.innerHTML)

4.销毁d
d=null;
------解决方案--------------------
利用DOM去找
HTML code
<script language="javascript" > 

var str = "aaa <span >bbbb </span >00000 <span >111 <span >222 <span class='6' >333 <span >444<span>34343</span> </span >333 <span >ccccc </span >333 </span >222 </span >111 </span >00000"; 
var div = document.createElement("div");
div.innerHTML = str;
findSpanTag(div);
alert(resultStr);
var resultStr = "";

function findSpanTag(obj)
{   
     for(var i=0;i<obj.childNodes.length;i++)
     {
        var element = obj.childNodes[i];
        if(element.nodeType==1)
        {
            if(element.tagName=="SPAN")
            {
                if(element.className=="6") //找到则返回
                {
                    resultStr=element.outerHTML;
                    return true;
                }
                if(element.childNodes.length!=0)  
                {
                    findSpanTag(element); //递规调用
                }
            }
        }
     }
     return false;
 }
 

</script>

------解决方案--------------------
现在才看懂楼主的意思,原来楼主是想把某个变量里的值进行replace,我正则不行,帮你顶一下。