2009-04-22 1 views
0

Исправленный: У меня есть элементы списка на странице, которую я создаю из записей базы данных (сообщений). Каждая запись содержит значение Id, которое я сейчас помещаю в каждое отдельное сообщение. То, что я хотел бы сделать, это когда они нажимают на ссылку вида, чтобы захватить значение идентификатора сообщения, чтобы затем я мог манипулировать им с помощью javascript.Какой атрибут (или ...) использовать при попытке захватить идентификатор одного элемента из списка в jQuery?

Сгенерированный HTML выглядит следующим образом:

<div id"messages"> 
    <div class="message"> 
    A cool message <a href="/Message/View/1" id="message_1" class="viewMessage">View</a> 
    </div> 
    <div class="message"> 
    A cool message <a href="/Message/View/2" id="message_2" class="viewMessage">View</a> 
    </div> 
    <div class="message"> 
    A cool message <a href="/Message/View/3" id="message_3" class="viewMessage">View</a> 
    </div> 
    <div class="message"> 
    A cool message <a href="/Message/View/4" id="message_4" class="viewMessage">View</a> 
    </div> 
</div> 

Когда я нажимаю на ид = message_1 Я хочу, чтобы получить значение идентификатора 1. Я пытаюсь избежать манипуляций со строками, чтобы получить значение идентификатора: как получить значение после «_». Было бы здорово, если бы я мог использовать один атрибут со значением «1» в нем.

$('.viewMessage').click(function() { 
    ...$(this).messageId... 
}); 

Могу ли я просто добавить атрибут? Я тоже попробую это сделать, но я думаю о целом строгой строчке xhtml, поэтому думал, что есть что-то лучше, чем делать это.

+0

именно то, что вы пытаетесь сделать? –

+0

Извините, я немного пересмотрю. – rball

+0

Зачем нужен идентификатор базы данных? Что произойдет, когда вы нажмете ссылку на сообщение? – strager

ответ

1

Если вы хотите принять (X) HTML 5, это позволяет произвольные атрибуты, имена которых начинаются с «данными - «для такого рода ситуации. Так что это может быть что-то вроде <a id="message_1" data-message-id="1">. В противном случае, я думаю, вам придется быть несоответствующим. 37signals uses this technique.

+0

Прохладный, я этого не знал. – rball

0

Пытается получить доступ к идентификатору щелкнутой ссылки?

Попробуйте

$('.viewMessage').click(function() { 
    var id = $(this).attr('id'); 
}); 
+0

Нет, я не. Я уточнил этот вопрос. Извините за недопонимание. – rball

1

Я предполагаю, что вы хотите, чтобы извлечь числовую часть идентификатора внутри обработчика щелчка.

$('.viewMessage').click(function() { 
    var id = this.id.replace(/message_/,''); 
    ...now go use it... 
}); 
+0

Хорошо, это правда, но есть ли способ сделать это без строковых манипуляций? – rball

+0

@ rball: id - это строка. Вам придется каким-то образом манипулировать им. – Shog9

1

Это захватывает номер из href анкера.

$('.viewMessage').click(function() { 
    var id = this.href.match(/\d+/); 
}); 

Если вы хотите использовать что-то вроде .messageId, вы хотите предобработки первый:

$('.viewMessage').each(function() { 
    this.messageId = this.href.match(/\d+); 
    // Or, to be more safe: 
    this.messageId = parseInt(this.href.match(/\d+), 10); 
}).click(function() { 
    alert(this.messageId); 
}); 
+0

Это определенно чище, чем у меня прежде. Я дам это, и посмотрим, сработает ли это. – rball

1

Я считаю, что в следующей спецификации html есть положение для пользовательских атрибутов. Вы префикс их с данными -
Итак, идентификатор данных будет действителен.

BTW: Обычно я использую пользовательские атрибуты.

1

Я не понимаю, почему вы установили id="message_1", когда вы действительно только хотите 1, но при условии, что есть причина, и вы не будете его изменить, вы можете использовать атрибут rel вместо этого.

<div id"messages"> 
    <div class="message"> 
     A cool message <a rel="1" href="/Message/View/1" id="message_1" class="viewMessage">View</a> 
     A cool message <a rel="2" href="/Message/View/1" id="message_2" class="viewMessage">View</a> 
    </div> 
</div> 

Это должно быть действительным XHTML, и вы должны быть в состоянии захватить только индекс с

var id = $(this).attr("rel"); 
+0

Как анти-семантику вас! =] – strager

+0

Идентификаторы, начинающиеся с цифр, недействительны HTML. –

+0

хорошо, я мог бы иметь posts_1 message_1 topic_1 thread_1 reply_1 ... у вас есть идея. – rball

Смежные вопросы