2016-11-29 144 views
0

我有点困惑jQuery如何通过DOM搜索。 它是否从根节点选择,类似于XPath /选择器,还是从当前选择,无论它们在哪里,类似于XPath //选择器?通过ID或类与jquery选择嵌套元素

我有以下设置:

<body> 
    <div id="contentSection"> 
    //A bunch of nested DIVs follow 
      <div id="parentDIV"> 
       <span>Selector1</span> 
       <select class="selector" id="first"> 
        <option value="1">1</option> 
        <option value="2">2</option> 
        <option value="3">3</option>     
       </select> 

       <span>Selector2</span> 
       <select class="selector" id="second"> 
        <option value="A">A</option> 
        <option value="B">B</option> 
        <option value="C">C</option>     
       </select> 
      </div> 
    </div> 
    <div id="someOtherDIVs> </div> 
    <div id="someOtherDIVs> </div> 
    </body> 

现在,如果我尝试首先选择的内容部分,然后按类别或ID过滤器,我可以将一个事件处理程序中选择元素,但如果我尝试要直接查询元素,事件处理程序从不附加。

例如,这个工程:

$('#contentSection').change('.plotSelector', function(e) 

但这些并不:

$('#first').change(function(e) ... 
$('.selector').change(function(e) ... 

有人能解释一下为什么?有没有一种方法可以从根中选择DOM中任何位置的任何元素?

使用jQuery 2.1.1

+0

对我的作品https://jsfiddle.net/3Lanknz7/ – Gavin

+0

..和我https://jsfiddle.net/markwill/0nunxzy5/2/ –

回答

0

是在选择跨越DOM(http://api.jquery.com/category/selectors/

在评论工作提供的小提琴工作,你检查你的控制台的错误,也许JavaScript是没有运行完全。

+0

控制台上没有错误。 – ventsyv

+0

也许检查你是否正确地选择,例如设置一个样式或元素上可见的东西。另外,检查你的JavaScript正在运行。小提琴的作品,所以它一定是微不足道的。 –

+0

这是微不足道的。注册事件的代码在页面完全呈现之前被调用,因此我想要附加的元素不存在。 Duhh – ventsyv

0

有没有办法从根目录中选择 DOM中任何位置的任何元素?

只要你从document.开始,标准的JavaScript方法所有从根选择:

  • document.getElementById('');
  • document.getElementsByClassName('');
  • document.getElementsByTagName('');
  • document.querySelector('');
  • document.querySelectorAll('');