2011-06-17 36 views
-1

問題定位在網頁中的特定URL和檢索值

我有一個Greasemonkey的腳本,它是檢查它有兩個包含在其內A HREF覈實。

我試圖將目標第二個HREF獲取場地ID字符串,但我不知道如何使用RegEx正確定位它(因爲RegEx總是在我的頭上)。

第二A 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做的,感謝我的可憐的正則表達式的知識,我不知道如何僅獲得第二個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()); 

回答

2

首先,以下$("div.boxContainer div.content > a");不會起作用,因爲div.content的下一個元素是H3,不答「>」選擇來選擇直接孩子。

如果你正在尋找剛剛找到任何與「/場地/」啓動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. 
}); 
+1

這個答案將工作 - AFAICS - 但它是從OP的起始代碼倒退。一些問題:(1)保持單獨的鏈接變量。這有助於調試,如果OP想要使代碼功能化(DRY範例)。 (2)對於目標網站來說,過寬的選擇符*可能是可以的,但最常見的情況是,它會導致誤報,並且很難針對不同情況調整響應。 (3)注意OP的代碼將優雅地失敗。但是,通過這種方式使用'match()'會導致腳本在頁面更改或誤報時發生崩潰。 –

+0

@Brock Adams - 那些評論很棒。我已經更新了我的代碼。讓我知道是否有其他事情吸引你的目光。 :) –

+0

那麼,既然你遵循我的建議,我必須+1。 ;) –