2016-07-29 67 views
0

我想点击其中有这样的HTML代码通过类名获取元素一定格

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

所以我已经试过是只取div的类页面的一些按钮里面a

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

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

有无论如何得到类名为b的按钮,但只有在类内名称为a的div内的一个?

P.S.我也试过这

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

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

,但我得到一个空数组[ ]作为回应时,我console.log(buttons)

+0

阅读[文档](https://developer.mozilla.org/en-US/docs/Web/API/document.getElementsByClassName)始终有用。 – Teemu

+0

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

回答

2

你可以使用querySelector来解决这个问题。

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

+0

。 var set = document.querySelectorAll('。a .b'); for(var i = 0; i flowtron

+0

@flowtron当我'console.log(设置)' –

+0

工作在这里:https://jsfiddle.net/nd8m7mms/ – flowtron

0

由于只有一个DIV将被分配class='a',你可以提供一个ID代替,或者,你可以这样做:

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>

这很好,在这里它是:https://jsfiddle.net/nd8m7mms/4/

+0

不能按下按钮:/ –

+0

(i

+0

当我尝试'console.log(按钮)'我得到一个空阵列[]'作为响应' –

0

您可以使用jQuery做

VAR键= $( 'A> .B。');

+0

看看这里的文档https:// api .jquery.com/child-selector/ –

0

这里是一个XPath解决方案:

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>

不幸的是Internet Explorer still doesn't support the XPath API

+0

好吧,让你的代码工作,但只有一次。如果我通过铬的控制台再次运行它,我得到'未捕获的TypeError:标识符'res'已被声明' –

+0

听起来像你重新声明'res'。这是一个与XPath解决方案无关的错误。你是否简单地复制并粘贴了两行代码?你不能说'让水库'两次,这是一个重新声明。 – bgoldst