正则表达式。在javascript中获取最后<a> tag in substring</a>

时间:2010-09-16 06:14:07

标签: javascript regex

我需要使用javascript在页面中找到最后一个<a>标记的文本。我读了这样的完整HTML:

var str = document.body.innerHTML;

我现在需要找到str的子部分,在该子部分中我需要找到最后一个<a>标记。可能有多个<a>标签,但确切的计数会有所不同。

以下是HTML外观的示例:


<td>

        <!-- BREADCRUMB--> 
        <table border="0" cellspacing="0"

            cellpadding="0"> 
            <tr> 
                <td style="width: 20px; padding-left: 15px;" valign="middle"> 
                    &nbsp;<a href="Default.aspx"><img src="images/home_button.gif" alt="home" border="0"

                        style="width: 15px; height: 14px;" /></a> 
                </td> 
                <td style="width: 550px; padding-left: 5px;" valign="middle"> 
                    <span class="Text"> 
                        <a href='Default.aspx'>Home</a> >
      <a href='CategoryMain.aspx?query=CZJ/7jr0Rq0mC78s0LikwNmBEwgNRtoEjG4cb6zHk46uJItFusMclq0wZCh1wGS2'>Parfume</a> >
      <a href='BrandsListing.aspx?query=CZJ/7jr0Rq0mC78s0LikwNmBEwgNRtoEjG4cb6zHk465BKkuLpVAwR0SP9v7KIHwSjHLYHxaEB1gp/DR0tT5hvBc/P/seC3NkvMSTAlIgeUoaEPLcBX/wyfqnK0dfYmkN3fGbFp/dIbBYKGQVRlF5lVNzw+DcOjSPuiVeiUTFuozCRO/xUJ9sumgm5fB1uwbQpUawHk1xUBVlq0lQmvGSznPA02SJH+t0d/2mm8UtUt6iBbH9wUOStWj5oKWMY+KCLyF1lhnL/mV2toi247YyA=='>Herredufte</a> > 
      <a href='ProductListing.aspx?query=AVqR4KVNq4jY0bZVFKEeYKGDosMoiEFZG6z2wWUHFnQPAkt8EaweP3EFy8mMm11vE+rSYj+OdLzbb41Vse4QE0vSjf36vrcSEJee9K1y/5ZMjd4Oni1tZUNBe6bZdssnYEXf0PGT9nU8HBFX+2mmgxbmijm9NESLPiWtnTY9rLpZGix4zQdXfnt1S1oY+sHQBDg1jXnhUTEsKoo0fZBwQqkUQgmDX5cUB5UCMzGTP6NRTufhqTRy5uhMeNqXzufAoP2NsI5va/HwWHRT3MeQ8U/0oQM3y5KiP3LJuTx2kwXo4v3qemaK3B+M6k1nSRqvUfvTnEcbGyrYEjiaTV0kEixbDojt3V2aNbXBRxax1yXQd9QIrVmryeymxX2Ga7f88KaC70fIahkjdQ2z3E+PkwpZ6iI5hp9Oj5jCm/5ffWGqUzJqF9mnTiSShg7VPRdx'>Bvlgari</a> > 
      Eau de Toilette Spray
                    </span> 
                </td> 
                <!-- Changed Section: The style will should be this !--> 
                <!-- <td class="Text"><a href="wishlist.html">Your Wish List</a> &nbsp;</td> --> 
                <td class="Text" style="padding-right: 10px; width: 92px; text-align: right;" valign="middle"> 


                   <a href="SiteContent.aspx?siteContentName=Price Guarantee"> 
                            <span id="ctl00_Label1">Prisgaranti</span> 
                       </a> 
                </td> 
                <td class="Text" style="padding-right: 0px; width: 50px; text-align: left;" valign="middle"> 
                    <a href="Wishlist.aspx"> 
                        <span id="ctl00_Label2" title="Ønskeliste">Ønskeliste</span></a> 
                </td> 
                <td class="Text" style="padding-right: 0px; width: 45px; text-align: left;" valign="middle"> 
                    <a href="MemberLogin.aspx"> 
                        <span id="ctl00_lblLogin" title="Login">Login</span></a> <a href="Logout.aspx"> 
                                </a></td> 
                <!--<td class="Text"><a href="becomeamember.html">Become a Member</a> &nbsp;</td>  --> 
                <td align="right" style="width: 30px; padding-right: 9px;" valign="middle"> 
                    <input type="image" name="ctl00$ImageButton1" id="ctl00_ImageButton1" src="images/flag_uk.gif" alt="Switch language" onclick="setLangCookie();" style="height:12px;width:21px;border-width:0px;" /> 
                </td> 
            </tr> 
        </table> 
        <!-- /BREADCRUMB --> 
    </td> 
</tr> 
</table>

我需要的是获取<a><span class="Text">条评论内的最后一个<!-- BREADCRUMB -->标记的文字。在这种情况下,它的文字“Bvlgari”

如果我能在这种情况下获得所有<a>标记文本的数组,那将是很好的:

“Home”,“Parfume”,“Herredufte”,“Bvlgari”

在PHP中你可以通过在模式中使用()然后引用它们来做到这一点,但我似乎无法在JS中使用它。我是使用reg.exp的新手。在Javascript。

希望它有意义。

BR /淑娜

3 个答案:

答案 0 :(得分:1)

获取jQuery或Prototype.js 在原型中,你会写一些类似

的东西
$$("tr td .Text a").map(function(el) { return el.innerText });

会返回你想要的东西。

答案 1 :(得分:1)

我认为您应该从元素中读取信息,而不是获取页面的整个HTML代码。

使用jQuery可以轻松获取信息:

var texts = $('span.Text a').map(function(){ return this.html(); }).get();

使用普通的Javascript,有点难以遍历没有身份的元素。如果您可以将id="Text"添加到您的范围内,则会更容易:

var links = document.getElementById('Text').getElementsByTagName('a');
var texts = [];
for (var i = 0; i <  links.length; i++) texts.push(links[i].innerHTML);

答案 2 :(得分:1)

感谢所有答案!特别是Seth和Guffa让我重回正轨:)

这是我的解决方案:

    for(var i = 0, n = spanArray.length; i < n; ++i) {
        if(spanArray[i].getAttribute("class") == 'Text') {
            spanArray[i].id = 'mltracking_breadcrumbs';
            var links = document.getElementById('mltracking_breadcrumbs').getElementsByTagName('a');
            var texts = [];
            for (var j = 0; j <  links.length; j++) {
                texts.push(links[j].innerHTML);
            } 
            alert(links.length);
        }
    }

我知道它对多个带有类名Text的spantag很敏感,所以如果有更好的选择,请告诉我。我在span标签上没有ID,也没有选择来获取它。