Как получить информацию из тега <a>action-data?
Я хочу поместить некоторую информацию в "action-data" href, например:
<a href=# action-data="userid={{g.user._id}}&messageid={{message._id}}" id=reply >reply</a>
но как вернуть ID пользователя и сообщения в код Javascript?
<script type=text/javascript>
$(function () {
$('a#reply').bind('click', function () {
$.getJSON($SCRIPT_ROOT + '/_get_replies', {
messageid: ??????How to get messageid from href action-data?
userid: ??????How to get userid from href action-data?
}, function (data) {
$('#replies').text(data.result)
});
return false;
});
});
3 ответа
Решение
Хранить его по-другому:
<a href="#"data-userid="{{g.user._id}}" data-messageid="{{message._id}}" id="reply">reply</a>
JQuery может получить это так:
var messageId = $('#reply').data('messageid');
Кроме того, событие click может быть намного короче:
$('a#reply').click(function(){
});
PS: не забудьте использовать кавычки, как вы не сделали в href
а также id
Если вы управляете разметкой, вы должны добавить к атрибутам префикс data-
не суффикс -data
, Кроме того, кажется, что проще иметь один атрибут для каждого свойства вместо анализа, так почему бы и нет:
<a href=# data-userid="{{g.user._id}}" data-messageid="{{ message._id }}" id=reply>
Тогда вы можете использовать JQuery data
:
var userid = $("a#reply").data("userid"),
messageid = $("a#reply").data("messageid");
Я также рекомендую рекомендации другого ответчика об использовании другой разметки. Однако, если вы не можете изменить разметку, вы можете проанализировать параметры следующим образом:
...
$('a#reply').click(function() {
// parse the 'action-data' attribute of the link
var actionData = $(this).attr('action-data');
var params = {};
$.each(actionData.split("&"), function(index, data) {
var keyValue = data.split("=");
params[keyValue[0]] = keyValue[1];
});
// now you can use params.userid and params.messageid
...