2009-04-22 3 views
0

Überarbeitet: Ich habe eine Liste Elemente auf der Seite, die ich aus Datenbanksätzen (Nachrichten) erstellen. Jeder Datensatz enthält einen ID-Wert, den ich derzeit in jede einzelne Nachricht einfüge. Was ich tun möchte, ist, wenn sie auf einen Link klicken, um den ID-Wert der Nachricht zu erfassen, so dass ich sie dann mit Javascript manipulieren kann.Welches Attribut (oder ...) wird verwendet, wenn versucht wird, die ID eines einzelnen Elements aus einer Liste in jQuery zu übernehmen?

erzeugten HTML wie folgt aussieht:

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

Wenn ich auf id = klicken Message_1 ich den ID-Wert von 1 zu bekommen Ich versuche, String-Manipulation, um zu vermeiden, dass den ID-Wert zu erhalten: wie Erhalte den Wert nach einem '_'. Es wäre großartig, wenn ich ein einzelnes Attribut mit dem Wert '1' darin verwenden könnte.

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

Kann ich einfach ein Attribut erstellen? Ich werde das auch wirklich versuchen, aber ich denke über das ganze xhtml strenge Zeug nach, also dachte ich, es gibt etwas Besseres als das zu tun.

+0

Genau gültig sein, was Sie zu tun versuchen? –

+0

Tut mir leid, ich werde ein bisschen überarbeiten. – rball

+0

Warum benötigen Sie die Datenbank-ID? Was passiert, wenn Sie auf den Link der Nachricht klicken? – strager

Antwort

1

Wenn Sie annehmen möchten (X) HTML 5, es beliebige Attribute, deren Namen mit „Daten starten können - "Für genau diese Situation. Das könnte also etwas wie <a id="message_1" data-message-id="1"> sein. Ansonsten denke ich, dass du nicht konform sein musst. 37 Signale uses this technique.

+0

Cool Ich wusste das nicht. – rball

0

Sie versuchen, auf die ID des angeklickten Links zuzugreifen?

Versuchen Sie, diese

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

Nein, bin ich nicht. Ich habe die Frage geklärt. Entschuldigen Sie das Missverständnis. – rball

1

Ich gehe davon aus, dass Sie den numerischen Teil der ID innerhalb des Click-Handler extrahieren möchten.

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

Ok, das stimmt, aber gibt es einen Weg, es ohne String-Manipulation zu machen? – rball

+0

@rball: Die ID ist eine Zeichenfolge. Du wirst es irgendwie manipulieren müssen, egal was passiert. – Shog9

1

Dies packt eine Zahl aus dem href des Ankers.

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

Wenn Sie so etwas wie .messageId verwenden wollen, möchten Sie Vorprozess zuerst:

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

Das ist definitiv sauberer als das, was ich vorher hatte. Ich werde es versuchen und sehen, ob es funktioniert. – rball

1

Ich glaube, dass in der nächsten Spezifikation von HTML gibt es eine Bestimmung für benutzerdefinierte Attribute. Sie setzen ihnen Daten voran -
Also, Daten-ID wäre gültig.

BTW: Ich gehe normalerweise mit benutzerdefinierten Attributen.

1

Ich verstehe nicht wirklich, warum Sie id="message_1" setzen, wenn Sie wirklich nur die 1 wollen, aber vorausgesetzt, es gibt einen Grund und Sie werden es nicht ändern, können Sie das rel Attribut stattdessen verwenden.

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

Das sollte XHTML, und Sie sollten in der Lage zu greifen nur den Index mit

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

Wie anti-semantisch von dir! =] – strager

+0

IDs, die mit Zahlen beginnen, sind kein gültiges HTML. –

+0

gut ich könnte Posts_1 message_1 topic_1 thread_1 reply_1 haben ... Sie bekommen die Idee. – rball

Verwandte Themen