问题
我有一个Greasemonkey脚本,它正在检查一个包含两个A HREF的DIV。
我正在尝试定位第二个HREF以获取场地ID字符串,但我不知道如何使用RegEx正确定位它(因为RegEx始终是我的头脑)。
目标的第二个HREF如下:
<a href="/venue/X">Venue name</a>
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 (' | ');
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 () );
答案 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.
});