2015-04-26 7 views
9
<a href="javascript:void(0)" class="PrmryBtnMed" 
id = "VERYLONGTEXT" 

onclick="$(this).parents('form').submit(); return false;"><span>Dispatch to this address</span></a> 

Ich habeWie kann ich document.querySelector verwenden, um diesen Klassennamen mit einem Leerzeichen darin auszuwählen?

var inPage = document.documentElement.innerHTML.indexOf('text to search') > 0, 
    el = document.querySelector(".PrmryBtnMed"); 

if (inPage && el) el.click(); 

mit Aber jetzt hat der Klassenname geändert: es gibt einen Raum und einig neuen Text in dem Klassennamen:

<a href="javascript:void(0)" class="PrmryBtnMed ApricotWheat" 
id = "VERYLONGTEXT" 
onclick="ApricotWheat(this); return false;"><span>Dispatch to this address</span></a> 

Wie kann ich el = document.querySelector(".PrmryBtnMed"); ändern um die richtige Klasse zu finden?

Ich versuchte mit el = document.querySelector(".PrmryBtnMed.ApricotWheat");, aber das hat nicht funktioniert.

Als nächstes habe ich versucht, ein Leerzeichen hinzuzufügen (und mit einem Backslash zu entkommen): el = document.querySelector(".PrmryBtnMed\ ApricotWheat");, aber das hat auch nicht funktioniert.

Also, ich fragte mich, ob ich für den Raum verwenden könnte .. aber kein Glück.

Ich wäre sehr dankbar für etwas Hilfe! Was mache ich falsch?

+0

Es gibt keine Räume in einem Klassennamen sein kann ... es gibt zwei verschiedene Klassen im Element ... Verwenden Sie ".PrmryBtnMed.ApricotWheat" – rafaelcastrocouto

+0

'document.querySelector (". PrmryBtnMed.ApricotWheat ") sollte funktionieren. [** jsFiddle Demo **] (http://jsfiddle.net/TexasBrawler/gyk26nbb/).Aber Sie können kein Leerzeichen in einem Klassennamen haben; das sind eigentlich zwei Klassen, ('PrmryBtnMed' ist eins und' AprikoseWheat' ist ein anderes). –

+0

Ich habe vergessen, hinzuzufügen, gibt es eine andere subtile Änderung, die ich jetzt bearbeitet habe, um einzuschließen: 'onclick =" ApricotWheat (this); return false; ">' (Anstelle von 'onclick =" $ (this) .parents ('form'). submit(); return false; ">') – Ted

Antwort

12

Klassen keine Leerzeichen haben können, was Sie haben es ein Element mit zwei ist separate Klassen darauf. So wählen Sie ein Element mit zwei Klassen, verwenden Sie eine Verbindungsklasse Selektor:

document.querySelector(".PrmryBtnMed.ApricotWheat"); 

dass das erste Element in dem Dokument auswählt, die beide die PrmryBtnMed Klasse und die ApricotWheat Klasse. Beachten Sie, dass es egal ist, in welcher Reihenfolge diese Klassen im Attribut class erscheinen, und es spielt keine Rolle, ob auch andere Klassen vorhanden sind. Es wäre zum Beispiel eine dieser, entsprechen:

<div class="PrmryBtnMed ApricotWheat">...</div> 

oder

<div class="ApricotWheat PrmryBtnMed">...</div> 

oder

<div class="PrmryBtnMed foo baz ApricotWheat">...</div> 

usw.

Beachten Sie auch, dass die Anführungszeichen Sie verwenden um HTML Attribute sind sporadisch ungültig; die Anführungszeichen um Attribute müssen normal, langweilig, single (') oder double (") sein, sie können keine schicken Zitate sein.

Live-Beispiel mit Zitaten fixiert und mit dem Selektor oben:

var el = document.querySelector(".PrmryBtnMed.ApricotWheat"); 
 
if (el) { 
 
    el.click(); 
 
} 
 

 
function ApricotWheat(element) { 
 
    alert(element.innerHTML); 
 
}
<a href="javascript:void(0)" class="PrmryBtnMed ApricotWheat" id="VERYLONGTEXT" onclick="ApricotWheat(this); return false;"><span>Dispatch to this address</span></a>

+0

Guter Ort mit den schicken Zitate, ich bin mir nicht sicher wie das passiert ist! Du hast ganz recht, sie sollten absolut nur '' '' '' '' '' – Ted

+0

Danke für Ihr Beispiel, aber was ist mit diesem Bit aus der ersten Zeile passiert: ''Text zu suchen'? (Ich verwende das zum Testen das Vorhandensein eines bestimmten Textes auf der Seite - wenn es da ist, dann möchte ich die Taste anklicken – Ted

+0

@Ted: Es war für das Beispiel irrelevant .. –

3

Es kann keine Leerzeichen in einen Klassennamen sein ... es gibt zwei verschiedene Klassen im Element sind ... verwenden ".PrmryBtnMed.ApricotWheat"

+0

Danke! Aber es funktioniert immer noch nicht, also muss es sein, weil 'if (inPage && el) el.click(); 'nicht mehr die gewünschte Aktion ausführt. Ich frage mich, ob es etwas mit 'onclick = "ApricotWheat (this) zu tun hat; return false; ">'? – Ted

+0

urw ... aber PLZ verwenden Event-Listener anstelle von onclick Attribut https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener – rafaelcastrocouto

Verwandte Themen