2009-04-22 8 views
0

Révisé: J'ai un élément de liste sur la page que je crée à partir d'enregistrements de base de données (messages). Chaque enregistrement contient une valeur Id que je suis en train de mettre dans chaque message individuel. Ce que je voudrais faire est quand ils cliquent sur un lien d'affichage pour attraper la valeur d'identification du message afin que je puisse manipuler alors avec javascript.Quel attribut (ou ...) utiliser lorsque vous essayez d'extraire l'identifiant d'un seul élément d'une liste dans jQuery?

html généré ressemble:

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

Lorsque je clique sur id = Message_1 Je veux obtenir l'identifiant de 1. J'essaie d'éviter la manipulation de chaînes afin d'obtenir l'identifiant: comme obtenir la valeur après un '_'. Ce serait génial si je pouvais utiliser un seul attribut avec la valeur '1' dedans. Puis-je simplement ajouter un attribut à un attribut? Je vais essayer cela aussi, mais je pense à tout le contenu strict de xhtml alors je pensais qu'il y avait quelque chose de mieux que de le faire.

+0

Exactement ce que vous essayez de faire? –

+0

Désolé, je vais réviser un peu. – rball

+0

Pourquoi avez-vous besoin de l'ID de la base de données? Que devrait-il se passer lorsque vous cliquez sur le lien du message? – strager

Répondre

1

Si vous voulez adopter (X) HTML 5, il permet des attributs arbitraires dont les noms commencent par « données - "pour exactement ce genre de situation. Donc, cela pourrait être quelque chose comme <a id="message_1" data-message-id="1">. Sinon, je pense que vous allez devoir être non-conformiste. 37signaux uses this technique.

+0

Cool je ne le savais pas. – rball

0

Voulez-vous accéder à l'ID du lien cliqué?

Essayez cette

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

Non, je ne suis pas. J'ai clarifié la question. Désolé pour le malentendu. – rball

1

Je suppose que vous voulez extraire la partie numérique de l'identifiant dans le gestionnaire de clic.

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

Ok, c'est vrai, mais y a-t-il un moyen de le faire sans manipulation de chaîne? – rball

+0

@rball: l'identifiant est une chaîne. Vous devrez le manipuler en quelque sorte, peu importe quoi. – Shog9

1

Ceci récupère un nombre à partir du href de l'ancre.

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

Si vous voulez utiliser quelque chose comme .messageId, vous voulez prétraiter premier:

$('.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

C'est nettement plus propre que ce que j'avais auparavant. Je vais essayer et voir si ça marche. – rball

1

Je crois que dans la prochaine spécification de html il y a une disposition pour les attributs personnalisés. Vous les préfixez avec des données -
Ainsi, l'ID de données serait valide.

BTW: Je vais généralement avec des attributs personnalisés.

1

Je ne comprends pas vraiment pourquoi vous définissez id="message_1" quand vous voulez vraiment que la 1, mais en supposant qu'il ya une raison et vous ne changera pas, vous pouvez utiliser le lieu attribut 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> 

Cela devrait être valable XHTML, et vous devriez être en mesure de saisir tout l'index avec

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

Comme c'est antisémantique! =] – strager

+0

Les ID commençant par des chiffres ne sont pas valides HTML. –

+0

Eh bien, je pourrais avoir posts_1 message_1 topic_1 thread_1 réponse_1 ... vous avez l'idée. – rball

Questions connexes