Javascript 获取document.getElementsByClassName的子类

Javascript 获取document.getElementsByClassName的子类,javascript,php,html,subclass,getelementsbyclassname,Javascript,Php,Html,Subclass,Getelementsbyclassname,因此,我有以下html代码: <div class='class1' id='example'> <span class='class2'>Some text</span> <span class='class3'>Some text 2</span> </div> 一些文本 一些文本2 我想获取每个类1,然后在类2和类3上添加一个事件侦听器(单击)(我需要这个id从PHP文件中获取一些信息)。我试过这样的方

因此,我有以下html代码:

<div class='class1' id='example'>
  <span class='class2'>Some text</span>
  <span class='class3'>Some text 2</span>
 </div>

一些文本
一些文本2
我想获取每个类1,然后在类2和类3上添加一个事件侦听器(单击)(我需要这个id从PHP文件中获取一些信息)。我试过这样的方法:

var yes = document.getElementsByClassName('class1');
for (var i=0 ; i<yes.length;i++)
  yes[i].getElementsByClassName('class2').addEventListener('click',redirectfunction,false);
yes[i].getElementsByClassName('class2')[0]
      .addEventListener('click',redirectfunction,false);
var yes=document.getElementsByClassName('class1');

for(var i=0;i首先
getsElementsByClassName
应该是
getElementsByClassName
(如果不是打字错误),然后
yes[i]。getElementsByClassName('class2')
返回一组找到的元素,您使用的是:

yes[i].getElementsByClassName('class2')
      .addEventListener('click',redirectfunction,false);
因此,您正在尝试在集合上添加事件侦听器。如果有多个元素,您可以使用另一个循环,或者仅使用类似以下内容:

var yes = document.getElementsByClassName('class1');
for (var i=0 ; i<yes.length;i++)
  yes[i].getElementsByClassName('class2').addEventListener('click',redirectfunction,false);
yes[i].getElementsByClassName('class2')[0]
      .addEventListener('click',redirectfunction,false);
更新:()

var els=document.querySelectorAll('div.class1');

对于(var i=0,l=els.length;i首先
getsElementsByClassName
应该是
getElementsByClassName
(如果不是打字错误),然后
yes[i]。getElementsByClassName('class2')
返回一组找到的元素,您使用的是:

yes[i].getElementsByClassName('class2')
      .addEventListener('click',redirectfunction,false);
因此,您正在尝试在集合上添加事件侦听器。如果有多个元素,您可以使用另一个循环,或者仅使用类似以下内容:

var yes = document.getElementsByClassName('class1');
for (var i=0 ; i<yes.length;i++)
  yes[i].getElementsByClassName('class2').addEventListener('click',redirectfunction,false);
yes[i].getElementsByClassName('class2')[0]
      .addEventListener('click',redirectfunction,false);
更新:()

var els=document.querySelectorAll('div.class1');

对于(var i=0,l=els.length;i您可能更好地使用querySelectorAll,因为它比GetElementsByCassName(IE 8+)具有更广泛的支持,并且您可以一次性获得元素:

var yes = document.querySelectorAll('.class1 > .class2, .class1 > .class3');
querySelectorAll返回一个静态节点列表,因此迭代返回的对象以访问成员


但是,请准备好为较旧的浏览器提供一个后备方案。

您可能最好使用querySelectorAll,因为它比GetElementsByCassName(IE 8+)具有更广泛的支持,并且您可以一次性获得元素:

var yes = document.querySelectorAll('.class1 > .class2, .class1 > .class3');
querySelectorAll返回一个静态节点列表,因此迭代返回的对象以访问成员



但是,要准备好为较旧的浏览器提供一个后备方案。

是的。lenght
?可能是length?另外,返回一个,而不是一个元素,因此不能在其上调用addEventListener。您的lenght、getsElementsByClassName拼写错误,并且侦听器中有一个点而不是逗号。您的示例中的长度输入是否只是一个输入错误问题?这只是一个输入错误,这不是问题所在。因此,为了澄清您的问题:您是否有3个元素组成的组,以便在每个组中,您需要将eventListener“redirectfunction”添加到该组中的class2元素中?
是的。length
?可能是length?此外,返回一个,而不是单个元素,因此您不能调用addEventListen呃。你拼错了lenght,getsElementsByClassName,并且在侦听器中有一个点而不是逗号。你的示例中的长度输入错误只是这个问题中的一个输入错误吗?这只是一个输入错误,这不是问题所在。因此,为了澄清你的问题:你是否有3个元素组成的组,以便在每个组中都需要添加eventListener的重读ctfunction'到该组中的class2元素?这似乎有效。完成此操作后,我如何从class1获取id以在redirectfunction中使用它?当我只有class1时,我使用了e.target.id,但现在?您可以使用
addEventListener('click',function(e){redirectfunction.call(This,e,This.id)},false)
then
function redirectfunction(event,id){/*这是调用侦听器的元素*/}
。狼人-我尝试过的Alpha函数redirectfunction(e){e=e | | window.event;var target=e.target | | e.srcelment;var id=target.id;//id}而且它不起作用…罗布,使用你的代码也不起作用(或者我不知道如何使用它:-o)。我如何才能发出警报,例如,使用代码的id?使用
alert('id是:'+id)是的,但是你没有使用相同的结构…id在class1上,函数在class2上使用。我需要class1中的id在class2上的事件侦听器中使用的函数上。这似乎是可行的。在这样做之后,我如何从class1中获取id在重定向函数中使用?当我只有y class1,我使用了e.target.id,但是现在?你可以使用
addEventListener('click',function(e){redirectfunction.call(this,e,this.id)},false);
然后
函数redirectfunction(event,id){/*这是调用侦听器的元素*/}
。狼人-我尝试过的Alpha函数redirectfunction(e){e=e | | | | window.event;var target=e.target | | | | e.srcelment;var id=target.id;//id}但它不起作用…RobG,使用你的代码也不起作用(或者我不知道如何使用它:-o)。例如,我如何使用该代码的id发出警报?使用
alert('id是:'+id)
在您获得
变量id之后。
是的,但是您没有使用相同的结构…id在class1上,函数在class2上使用。我需要class1中的id在class2上的事件侦听器中使用的函数上。