Javascript 从链接元素获取第一个属性

Javascript 从链接元素获取第一个属性,javascript,Javascript,有一个小问题我正在解决。我有这个链接元素 <a href="/web_send_message_widget.php?recipient_id=123456789">Message</a> 这就是没有用户登录时显示的内容,并将用户重新加载到登录页面。 但如果用户已登录,则会显示此信息 <a href="#" onlick="messagePopupShow({force_recipient_id:123456789}); return false;">M

有一个小问题我正在解决。我有这个链接元素

<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号。link元素在DOM中的位置不变,但属性不同

然后在这两种情况下也拆分结果以仅获得ID号


如果可能,所有操作都是用纯JavaScript完成的。

最好检查这两种情况,因为您知道这些情况(
href
onclick
),并且您可能无法始终保证它将是
标记中指定的第一个属性。如果将来有任何页面需要更新,等等

以下是我的建议:

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')

通过这种方式,您还可以方便地在将来添加其他案例,并且无需确保收件人id始终位于每个链接的第一个属性中


干杯

在纯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];
        }
    }
}
var-anchors=document.getElementsByTagName('a');
对于(var i=0;i1){
返回m[1];
}
}
if(锚定[i].getAttribute('onclick')){
var m=anchors[i].getAttribute('onclick').match(/force\u recipient\u id:(\d+/);
如果(米和米长度>1){
返回m[1];
}
}
}

此“属性顺序”仅存在于HTML代码中,而不存在于DOM中。(除此之外,你说你感兴趣的部分是你第二个HTML代码片段中的第二个属性——如果你真的要寻找“第一个”,你只会得到
href
属性的
#
。)所以你的整个问题没有什么意义。在第一种情况下,你想要“/web\u-send…”在第二种情况下,你想得到“#”值吗?我想您可以使用一些anchor=document.getElement。。。方法,并且,anchor.href值应该包含您想要的内容…如果是这样的话。老实说,我跳过了第一个href=“#”。我想我的问题是不可能的。我不知道你用什么来呈现你的HTML,但是你可以用你想要获取的值向元素添加一个“data-”属性吗?HTML是由一个不是我的主机呈现的。否则我会的。但是,检查网站的用户中有90%都已登录,因此我将坚持单击
onClick
,如果用户未登录,我将发出
警报()