jQuery Selector规范不一致

Inconsistent jQuery Selector specifications

本文关键字:不一致 Selector jQuery      更新时间:2023-09-26

我有一个如下的表

<div  id="div13" class="ctnr">
  <table id="mainTable13" class="dtable" cellpadding="3" cellspacing="1" border="0">
    <thead>
        <tr><th>*</th><th>Proposal</th></tr>
    </thead>
    <tbody id="tbdy">
       <tr id="zrow0" class="gradeX">
          <td><input id="ckb0"      type="checkbox" /></td>
          <td        id="proposal0" style="width:55%">This is a comment</td>
       </tr>
    </tbody>
  </table>
</div>

代码中引用如下:

function extractRowCell(divNode){
// Here we will extract all the checked Proposals...
var all = ''
var i=0
var dnode = '#'+divNode.id   //  First construct a CSS-like ref to the node's ID 
var mTable = dnode.replace("div","mainTable")+' '+"#tbdy tr "   //Ref to the DataTable.TopRow in the DIV
//alert(mTable);
$(mTable).each(function() {    
    //alert($(dnode+' #proposal'+i).text());
    //alert($('#ckb'+i+':checked').val());
    if ($('#ckb'+i+':checked').val() !== undefined) {
        alert($(dnode+' #proposal'+i).text());
        all = all+$(dnode+' #proposal'+i).text()+ ''n'n'n';
        }
    i=i+1;
    alert(all+'     'n'+mTable+'#proposal'+i);
    });
}

问题是为什么这两个被注释掉的警报需要不同的选择器结构???我对此完全感到困惑!在这里,让我解读它们,并将它们并排放置。。。

    alert($('#div13 #proposal1'   ).text());
    alert($(       '#ckb1:checked').val());

实际上,第二个选择器不需要指示它位于第13个div("#div13"),而上面没有"#div3"的选择器将指向"#div1"。但是,如果在第二个值之前加上"#div13",那么测试始终会给出false值。

我承认我很困惑!我今天一整天都在和这个斗争!没有线索!任何能让我挺直腰板的勇敢的人都是我的英雄!

Dennis

理想情况下,元素的id在页面上应该是唯一的。如果你遵循它们,你就不需要id选择器的任何前缀来限制元素在页面上的匹配。

在您的情况下,当您将#div13前缀为#ckb1时,jQuery将在#div13中查找#ckb1,否则它将在整个页面中搜索。当您不指定前缀#div1时,如果存在多个id相同的元素,jQuery将选择id匹配的第一个元素,并将其包含在匹配的集合中。