php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.01.2011, 11:24  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard Best Practice jQuery -> DOM Elemente Ansprechen

Hallo Jungs und ein frohes 2011!

Wünsche allen beruflich wie auch privat Glück und Gesundheit!

Ich hab da ne kurze Frage. Grundsätzlich ist es ja performanter man spricht Elemente im DOM mit der ID an, anstatt des Klassen Selektors. Nun hab ich in meiner Anwendung eine vielzahl von Elementen welche als ID die ID der Datenbank erhalten. Dies macht es extrem einfach die Werte via Ajax zum Beispiel mit Formular Daten zu versenden oder auch wenn man einfach Daten abfragen will.

Mal davon abgesehen dass es nach dem W3C verboten ist die gleiche ID mehrmals zu vergeben, kann es trotzdem vorkommen dass auf einer Seite zwei Listen ausgegeben werden, wo Daten aus verschiedenen Tabellen der Datenbank ausgegeben werden, womit natürlich dann auch doppelte IDs vorkommen können.

Meine Frage dazu, soll ich nun weiterhin als ID die ID des Datensatzes aus der Datenbank verwenden, und beim selektieren der DOM Elemente hald mit ID + Klassen Typ vorgehen um die doppelten Elemente zu verhindern, oder gar auf das ID Attribut verzichten, oder das ID Attribut mit dem ID Wert der Datenbank einfach um einen Kennzeichner erweitern?

Hier mal ein Beispiel für den Fall dass meine Ausführungen unklar sein sollten

Zur Zeit kann es sein dass ich zwei seperate Listen habe, mit Dokumenten und Nachrichten zum Beispiel, wo dann zwei Divs vorkommen mit der gleichen ID:

Code:
<div id="34" class="docList">
   Mein erstes Dokument
</div>

<div id="34" class"msgList">
   Meine erste Nachricht
</div>
Dadurch funktionieren dann meine jQuery Scripts natürlich nicht mehr wenn ich zum Beispiel nach einer Funktion welche durch

Code:
$(".docList").click(function(){
$.(ajax{
 url: "daten.php",
 typ: "POST",
 data: "docID=" + $(this).atr("id")
 success: function(html){
    $("#" + $(this).atr("id").html(html);
})
});
Daten zurück geschrieben werden, da ja das DIV mit dieser ID zweimal existiert.

So wie ich das sehe habe ich nun folgende Möglichkeiten das Problem aus der Welt zu schaffen:

Code:
<div id="34-doc" class="docList">
   Mein erstes Dokument
</div>

<div id="34-msg" class"msgList">
   Meine erste Nachricht
</div>
Und dann jeweils die id mit javascript parsen damit ich nur noch die ID erhalte und diese via ajax senden oder:

Code:
<div id="34" class="docList">
   Mein erstes Dokument
</div>

<div id="34" class"msgList">
   Meine erste Nachricht
</div>
Und beim zurückschreiben hald das Div nicht nur mit dem ID Selektor ansprechen sonder kombiniert mit:

Code:
$("#34 .docList").html(html);
Was würdet ihr empfehlen? Wie löst Ihr dieses Problem? Jedes mal ein verstecktes Input Feld hinterlegen wo die ID des Datensatzes liegt scheint mir auch nicht die richtige Lösung zu sein.

Performance sowie korrekte Verwendung von jquery währen gewünscht.

vielen Dank für eure Erfahrungen!
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.01.2011, 11:28  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.114
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

http://api.jquery.com/data/

http://ejohn.org/blog/html-5-data-attributes/

MFG
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Alt 07.01.2011, 11:39  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard

Hey BlackScorp!

Vielen Dank für die beiden Links. Ist ja ein cooles Feature. Wenn ich das richtig verstanden habe kann ich also gleich vorgehen mit dem Unterschied dass ich statt id="34" z.Bsp. data-ID="34" verwende, oder?

Nur ist das gleich performant wie wenn ich Elemente mit einer ID anspreche?

Ansonsten wäre ja die Variante die ID "unique" zu gestalten mit einer Erweiterung die bessere Lösung.

Oder wie siehst du das?

Grüsse

Stefan
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Alt 07.01.2011, 12:00  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.114
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

also ich kann dir zu der perfomance ncihts sagen , ich denke du müsstest es einfahc mal ausprobieren aber spürbare unterschiede wirste sicherlich nicht sehen und W3C validator würde auch nicht meckern

einfach mal ausprobieren und mal berichten was du festgestellt hast, habe dieses feature selbst noch nie benutzt aber werde es noch tun.

Und ja, statt id, trägst du ein data-ID und statt
$("#34") , musste es mit $("div").data("ID") == "34" abfragen und die ID setzt du mit $("div").data("ID","34");
MFG
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Alt 07.01.2011, 16:27  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Der class-Selektor wär mMn. wesentlich performanter als der Zwischenschritt mit data(). Abgesehen davon kannst du dann trotzdem doppelte data-ids haben. Oder ist das kein Problem?

Verstehe auch nicht, wieso da kein prefix vor der ID hängt. Wieviel schneller der id-Selektor ist, hängt auch stark vom Browser ab.

siehe auch hier

Kannste dir auch mal umbauen, wäre interessant zu wissen, wie viel schneller der ID-Selektor gegen den Class-Selektor im IE 8/9 ist.
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 07.01.2011, 17:02  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Unabhängig von Performance-Fragen darfst Du niemals doppelte IDs in HTML verwenden. Das widerspricht der Spezifikation. Dass Javascript überhaupt damit läuft ist somit nicht garantiert.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 07.01.2011, 17:07  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.114
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

ich glaube wenn in divs data-id="34" steht, ist es w3c valide da ja dieses data nur auf den div bezieht
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Alt 08.01.2011, 01:58  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich rede auch von id, nicht von data-id. data-id ist aber erst aber html5 ein valides Attribut.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 08.01.2011, 13:20  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Ich glaube im XHMTL ist eine rein numerische ID nicht valide und eine gleichnamige ID schon gar nicht.

Da ich mit meiner Chefin im Praktikum auch eine ähnliche, eigentlich die gleiche Diskussion hatte ist es performanter sich gewisse Elemente mit getElementsByTagName in ein Array zu schreiben und anhand des class Attributes anzusprechen. Weil wenn man mit getElementById arbeitet hangelt er sich durch alle Dokumentebenen und sucht nach der passenden ID und das kann bei einer großen Dokumentstruktur und vielen verschachtelungen schon etwas Zeit in anspruch nehmen. Während bei der anderen Methode alle Elemente mit dem Tag ausgelesen werden und dann nur nach dem class Attribut aussortiert werden und im Gegensatz zum ID Attribut hat class den Vorteil das eine class beliebig oft im Dokument verwand werden darf.

Ich hoffe ich habe mit meiner Aussage recht, dass ist zumindest das was mir meine Chefin dazu erklärt hat.

Gruß Litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 08.01.2011, 16:12  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

@ litter: das kommt erstmal auf den Browser an und läßt sich spontan nicht beantworten, ohne den Fall genauer zu beschreiben.

Ich würd generell aber davon ausgehen, dass bei neueren Browsern getElementByID am schnellsten ist.
http://www.uize.com/tests/performanc...ntsByName.html
-> 40.000 mal getElementByID

FF 3.6: 65ms
Chromium 10: 20ms,

IE8 : 921ms
IE6 : 11376ms
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Quelltext einer bestehenden Anwendung kürzen - Best Practice? jesuspresley PHP Einsteiger 3 22.02.2011 12:18
Best Practice: Datenbankabfragen tarian Software-Design 21 21.01.2011 21:52
best practice bei Sprachvar. in JS cycap Software-Design 18 25.11.2010 18:38
[Erledigt] Best Practice DB Verbindung makebzimage Software-Design 31 04.11.2010 14:04
best practice bei einbindung von JS / CSS files cycap Software-Design 27 26.10.2010 18:42
[Erledigt] Jquery div ansprechen TZP JavaScript, Ajax und mehr 4 15.10.2010 09:29
[Erledigt] Dynamische Elemente (createElement) per CSS ansprechen Arne Drews JavaScript, Ajax und mehr 6 01.09.2010 21:52
best practice - OOP Kern und Komponenten in Applikation wiederverwenden Murdoc PHP-Fortgeschrittene 22 23.08.2010 10:10
jQuery Bild in DIV ansprechen. JanM JavaScript, Ajax und mehr 2 14.06.2010 13:12
Tutorial / Best Practice für kl. Windows Server Cluster Plague Server, Hosting und Workstations 1 01.04.2010 22:49

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
jquery mehrere klassen ansprechen, jquery mehrere elemente ansprechen, jquery class ansprechen, jquery elemente ansprechen, jquery klasse ansprechen, jquery klassen ansprechen, jquery id ansprechen, jquery dom element, jquery mehrere selektoren ansprechen, jquery kindelemente ansprechen, jquery mehrere ids ansprechen, jquery dom auslesen, jquery zwei klassen ansprechen, jquery zwei elemente ansprechen, jquery attribute ansprechen, jquery dom element ansprechen, jquery element in einem anderen ansprechen, php elemente ansprechen, jquery zwei ids ansprechen, mehrere klassen ansprechen jquery

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:03 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum