2016-07-29 18 views
0

Ich versuche, einige Tasten auf einer Seite zu klicken, die diesen HTML Code nur der div Klasse zu nehmen, soGet Element von Klassennamen innerhalb bestimmter div

<div class="a"> 
    <span> 
    <a class="b" role="button">test</a> 
    </span> 
</div> 

, was ich habe versucht ist, hat a

var buttons = document.getElementsByClassName('a').getElementsByClassName('b'); 

for(var i = 0; i <= buttons.length; i++) 
    buttons[i].click(); 

Gibt es trotzdem die Schaltfläche mit dem Klassennamen b, aber nur die, die innerhalb der div mit Klassennamen ist a ??

P.S. Ich habe auch versucht, und diese

var buttons = document.getElementsByClassName('a').getElementsByTagName('span').getElementsByClassName('b'); 

    for(var i = 0; i <= buttons.length; i++) 
     buttons[i].click(); 

aber ich bekomme ein leeres Array [ ] als Antwort, wenn ich console.log(buttons)

+0

Das Lesen der [docs] (https://developer.mozilla.org/en-US/docs/Web/API/document.getElementsByClassName) ist immer nützlich. – Teemu

+0

'var buttons = document.getElementsByClassName ('a') [0] .getElementsByClassName ('b');' –

Antwort

2

Sie können querySelector verwenden, um das Problem zu beheben.

document.querySelectorAll("div.a a.b");

+0

in der Tat. var set = document.querySelectorAll ('.a .b'); für (var i = 0; i flowtron

+0

@flowtron noch bekomme ich ein leeres Array als Antwort, wenn ich 'console.log (set)' –

+0

funktioniert hier: https://jsfiddle.net/nd8m7mms/ – flowtron

0

Da nur ein div der class='a' zugewiesen wird, können Sie entweder eine ID liefern stattdessen oder, Sie können dies tun:

var spans = document.getElementsByClassName('a')[0].getElementsByTagName('span'); 
 
// [0] indicates the first element with the class='a' 
 
for(var i = 0; i < spans.length; i++) { 
 
    spans[i].getElementsByClassName('b')[0].click(); 
 
}
<div class="a"> 
 
    <span> 
 
    <a class="b" role="button" href="javascript:void(0)" onclick="console.log(this.innerHTML+' was clicked !')">test 1</a> 
 
    </span> 
 
    <span> 
 
    <a class="b" role="button" href="javascript:void(0)" onclick="console.log(this.innerHTML+' was clicked !')">test 2</a> 
 
    </span> 
 
    <span> 
 
    <a class="b" role="button" href="javascript:void(0)" onclick="console.log(this.innerHTML+' was clicked !')">test 3</a> 
 
    </span> 
 
</div>

Dies funktioniert perfekt, hier ist es: https://jsfiddle.net/nd8m7mms/4/

+0

Es klickt nicht auf die Schaltfläche:/ –

+0

(i

+0

Ich bekomme ein leeres Array '[]' als Antwort, wenn ich versuche, 'console.log (buttons)' –

0

können Sie jQuery verwenden und tun

var Tasten = $ ('a> .B.');

+0

Werfen Sie einen Blick auf die Dokumentation hier https: // api .jquery.com/Kind-Selektor/ –

0

Hier ist ein XPath-Lösung:

let res = document.evaluate('//*[@class="a"]//*[@class="b"]',document,null,XPathResult.ANY_TYPE,null); 
 
res.iterateNext().click();
<div class="a"> 
 
    <span> 
 
    <a class="b" role="button" onclick="console.log('clicked!')">test</a> 
 
    </span> 
 
</div>

Leider Internet Explorer still doesn't support the XPath API.

+0

Ok, also funktioniert Ihr Code nur einmal. Wenn ich es wieder durch die Konsole von Chrome laufen lasse, bekomme ich dieses 'Uncaught TypeError: Identifier 'res' wurde bereits deklariert. –

+0

Klingt so, als hättest du' res' umbenannt. Das ist ein Fehler, der nichts mit der XPath-Lösung zu tun hat.Haben Sie einfach die beiden Codezeilen kopiert und eingefügt? Du kannst nicht zweimal "let res" sagen, das ist eine Redewendung. – bgoldst

Verwandte Themen