2014-03-12 51 views
0

我有一個小問題,我正在運行槽。我有這個鏈接元素。從鏈接元素獲取第一個屬性

<a href="/web_send_message_widget.php?recipient_id=123456789">Message</a> 

這就是沒有用戶登錄時顯示的內容,並將用戶重新登錄到登錄頁面。 但是,如果用戶已經登錄,則會顯示此信息。

<a href="#" onlick="messagePopupShow({force_recipient_id:123456789}); return false;">Message</a> 

我試圖讓在兩種情況下123456789 ID號。鏈接元素不會更改DOM中的位置,但屬性不同。

然後還分裂結果得到只是在兩種情況下的身份證號碼?

如果可能,全部在純JavaScript中完成。

+0

這種「屬性序」只存在於HTML代碼,它不存在DOM。 (除此之外,你說你感興趣的部分是你的第二個HTML代碼片段中的_second_屬性 - 如果你真的要查找「第一個」,你只會得到''href''屬性的'#' )所以你的整個問題沒有什麼意義。 – CBroe

+0

在第一種情況下,您想要「/ web_send ...」,而在第二種情況下,您希望獲得「#」值?我認爲你可以使用一些anchor = document.getElement ...方法,並且,anchor.href值應該保持你想要的。 – jsmaupin

+0

......的確如此。我老實說在第一個href =「#」上跳過了。 我想我的問題是不可能的。 – Marian

回答

1

在純JavaScript,我會做這樣的事情:

var anchors = document.getElementsByTagName('a'); 

for (var i = 0; i < anchors.length; i++) { 
    if (anchors[i].getAttribute('href')){ 
     var m = anchors[i].getAttribute('href').match(/[?&]+recipient_id=(\d+)/); 
     if (m && m.length > 1){ 
      return m[1]; 
     } 
    } 

    if (anchors[i].getAttribute('onclick')){ 
     var m = anchors[i].getAttribute('onclick').match(/force_recipient_id:(\d+)/); 
     if (m && m.length > 1){ 
      return m[1]; 
     } 
    } 
} 

FIDDLE

+0

謝謝你的幫助。這將非常有用! – Marian

1

由於您知道案例(hrefonclick),所以最好檢查兩種情況,並且您可能無法始終保證它是a標記中指定的第一個屬性。如果任何網頁的人在將來被更新等

這裏就是我會建議:

function getRecipientId(a) { 
    // look for the recipientId in the href 
    var matches = $(a).attr('href').match(/^.*recipient_id=(\d+)/); 
    if (matches && matches.length > 0) { 
    return matches[1]; 
    } 

    // look for the recipientId in the onclick 
    var matches = $(a).attr('onclick').match(/^.*force_recipient_id:(\d+)/); 
    if (matches && matches.length > 0) { 
    return matches[1]; 
    } 

    return false; 
} 

而你也這樣稱呼它:getRecipient('a#linkId');

通過這種方式,您還可以在未來輕鬆添加其他案例,並且您無需確保recipient_id始終位於每個鏈接的第一個屬性中。

乾杯!