定位页面中的特定URL并检索值

时间:2011-06-17 15:13:54

标签: jquery regex greasemonkey

问题

我有一个Greasemonkey脚本,它正在检查一个包含两个A HREF的DIV。

我正在尝试定位第二个HREF以获取场地ID字符串,但我不知道如何使用RegEx正确定位它(因为RegEx始终是我的头脑)。

目标的第二个HREF如下:

<a href="/venue/X">Venue name</a>
  • X是场地的数字ID。

HTML示例

<div class="boxContainer">
    <div class="content">
        <h3><img src="https://4sqstatic.s3.amazonaws.com/img/crown-a90b8cffe95be2f88fb5b1c203313a3d.png" height="25" width="25" alt="crown" /><strong><a href="/braskic">Andrew Braskic</a></strong> @ <a href="/venue/4314657">Ascot Car Park</a></h3>
    </div>
</div>
到目前为止

代码

目标正在 var venueID 进行,由于我的RegEx知识不足,我不知道如何只获得第二个HREF(以下示例从第一个HREF获取信息 - 请参阅上面的HTML示例以查看DIV中的第一个HREF:

var SearchFriendLinks  = $("div.boxContainer div.content > a");


SearchFriendLinks.each (function () {

    var jThis       = $(this);
    var venueID     = jThis.attr ('href').replace (/\D+(\d+)$/, '$1');
    jThis.parent ().append (' (' + venueID + ') ');
    jThis.parent ().append ('<a href="/venue/' + venueID + '/edit">Manage venue</a>');
    jThis.parent ().append ('&nbsp;|&nbsp;');
    jThis.parent ().append ('<a href="/edit_venue?vid=' + venueID + '">Edit venue</a>');
} );

GM_addStyle ( (<><![CDATA[
    div.FriendResult div.name > a + a
    {
        font-size:      0.7em;
        margin-left:    2em;
    }

]]></>).toString () );

1 个答案:

答案 0 :(得分:2)

首先,以下$("div.boxContainer div.content > a");将不起作用,因为div.content的下一个元素是H3,而不是A.“&gt;”选择器用于选择直接子项。

如果你想找到以“/ venue /”开头的任何A元素,你可以这样做:

// Select all links with the word venue in them
$('a[href^="/venue/"]')

如果计划是在场地链接后添加链接,您可以这样做:

更新:我已根据@Brock Adams的建议稍微更新了以下代码。我保持匹配A元素的数组作为变量分开,我已经将查询更新为更具体(而不仅仅是a[href^="/venue/"]之前),最后,我添加了一个if语句以确保this.href.match()返回一个非null变量。如果match()失败,则会返回null,并且if将不会被执行。

var SearchFriendLinks = $('div.boxContainer div.content h3 a[href^="/venue/"]');

SearchFriendLinks.each(function()
{
  var venue = this.href.match(/(\d+)$/);

  if ( venue && venue[1] )
    $('<a href="/venue/' + venue[1] + '/edit">Manage venue</a>').insertAfter(this);

  // Do more useful stuff here.
});