Verdirbt doppelte ID jquery Selektoren?

7

Wenn ich zwei divs hätte, beide mit id="myDiv"

Würde $("#myDiv").fadeOut(); beide Divs ausbleichen? Oder würde es nur die erste / zweite verblassen? Oder gar nicht?

Wie ändere ich, welche es ausblendet?

Hinweis: Ich weiß, dass doppelte IDs gegen Standards sind, aber ich verwende das fancybox modale Popup und dupliziert den angegebenen Inhalt auf Ihrer Seite für den Inhalt des Popups. Wenn jemand einen Umweg darüber kennt (vielleicht benutze ich fancybox falsch), lass es mich wissen.

    
Matt 27.06.2009, 23:53
quelle

7 Antworten

6

jQuery stimmt bei der Abfrage einer ID genau mit einem Element überein. Ein Array von höchstens einem Element -Objekt wird von $("#foo").get() zurückgegeben. Weitere Informationen finden Sie in der jQuery-Dokumentation , oder probieren Sie es selbst aus.

%Vor%     
William Brendel 28.06.2009, 00:02
quelle
11

Element-IDs sollen eindeutig sein. Mehrere DIVs derselben ID zu haben, wäre falsch und unvorhersehbar und widerspricht dem Zweck der ID. Wenn Sie das getan haben:

%Vor%

Das würde beide ausblenden, vorausgesetzt, Sie geben ihnen eine Klasse von myDiv und eindeutige IDs (oder gar keine).

    
karim79 27.06.2009 23:58
quelle
7

"Hinweis: Ich weiß, dass doppelte IDs gegen Standards sind"

Dann tu es nicht. Sie haben bereits zwei Probleme erkannt. Es verstößt gegen Standards und stört den Auswahlmechanismus von jQuery (und in der Tat des regulären DOM). Es wird wahrscheinlich in Zukunft weitere Probleme geben.

Sie sind mit fancybox falsch, in diesem Fall hoffe ich, dass jemand, der damit vertraut ist, Ihnen hilft. Oder, wenn das Skript selbst fehlerhaft ist, sollten Sie es nicht verwenden.

    
Matthew Flaschen 27.06.2009 23:58
quelle
1

Da $ ('# myDiv') nur das erste Div mit dieser ID zurückgibt, müssen Sie alle Elemente mit dieser ID mit diesem Trick finden:

%Vor%

Also, für Ihren Fall, die FadeOut auf alle diese divs anzuwenden:

%Vor%

Und wenn Sie sicherstellen möchten, dass Ihre Seite diese ID nicht zweimal hat, können Sie die zusätzlichen entfernen, indem Sie Folgendes tun:

%Vor%     
Head 26.04.2010 00:06
quelle
1

Sie können auch den Weg der Verwendung von find () gehen. find gibt alle Elemente mit dieser ID zurück, und Sie können den Bereich auf einen bestimmten Elternteil beschränken, falls erforderlich, versuchen Sie etwas wie $(document).find('#myDiv').fadeOut();

oder

%Vor%     
Steve Ottenad 05.11.2010 22:53
quelle
0

Ich stieß auf das gleiche Problem. Wenn Sie auf der Seite, auf der Sie eine Fancybox öffnen möchten, Inhalt erstellen, wird anscheinend ein Spiegel-Div des ursprünglichen Inhalts erstellt. In meinem Fall wurden die Steuerelemente in ein Div eingepackt, das fancybox mit dem Namen "fancy_div"

erstellt

Ich konnte das Steuerelement auswählen und seinen Wert ermitteln, indem ich das folgende Format für den Selektor verwende:

$ ('# fancy_div [id = EingabeText]'). val ();

Ihre Steuerelemente können sich an anderer Stelle in der Fancybox befinden. Am besten ist es, sich die Viewsource anzusehen, aber es ist schwierig.

Verwenden Sie die folgende Technik, um zur Ansichtsquelle zu gelangen: Fügen Sie dieses Tag in Ihr Formular ein: Wert erhalten Öffnen Sie Ihr Formular, klicken Sie auf das Tag, um das Benachrichtigungsfenster zu öffnen.
Stellen Sie sicher, dass sich der Cursor innerhalb des Seiteninhalts befindet (suchen Sie ein Steuerelement und klicken Sie darauf).
Klicken Sie mit der rechten Maustaste aus dem Steuerelement und wählen Sie "Quelle anzeigen".
Es gibt eine Menge divs. Suchen Sie nach dem div, das Ihren Inhalt enthält.

Hoffe, das hilft.

    
04.08.2009 21:38
quelle
0

Ich hatte kürzlich ein ähnliches Problem. Ich hatte eine einzelne Seite, die unterschiedliche Inhalte durch eine Ajax-Last zeigte. Es gibt eine Schaltfläche, die den Server dazu veranlasst, ein PDF-Bild zu erzeugen.

Meine ursprüngliche Lösung war die Verwendung eines Klassenselektors, der gut funktionierte, aber Reibung mit einem anderen Entwickler verursachte. Es gab bereits so viele Klassen in den Links, dass die Verwendung einer Klasse als Bezeichner den Code hässlich machte. Also habe ich ein Namensattribut verwendet:

%Vor%

Arbeitete gerade Dandy!

    
Steve Gelman 17.03.2014 21:40
quelle