2012-01-30 37 views
1

我有一個表如下不一致jQuery選擇規格

<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」),而上面的一個沒有「#div13」將伸手到「#div1」。但是如果你在第二個之前加上「#div13」,那麼測試就會一直給出值爲false的值。

我會承認我很困惑!我今天一整天都在戰鬥!沒有線索!任何勇敢的靈魂都能讓我變得更加直白,就是我的英雄!

Dennis

回答

0

理想情況下,頁面上元素的id應該是唯一的。如果你遵循他們,你不需要任何前綴的id選擇器來限制元素匹配在頁面上。

在你的情況正在發生的事情是,當你前綴#div13#ckb1 jQuery將尋找#ckb1#div13否則將在整個頁面進行搜索。如果沒有指定前綴#div1,如果有多個具有相同id的元素,jQuery將選擇id匹配的第一個元素,並將其包括在匹配的集合中。

+0

不......只選擇'#ckb1'時,jQuery只會通過'document.getElementById()'選擇帶ID的第一個元素。 – BoltClock 2012-01-30 05:23:54

+0

@BoltClock - 是的,這是正確的。修改我的答案。 – ShankarSangoli 2012-01-30 05:26:37

+0

忘記我回復的內容。在我給出前面的回覆之前,你已經明白了!抱歉!你們是對的。習慣jQuery對我來說很難。或者我應該在這種情況下說CSS,因爲它與它相同!多謝你們! – DeKoss 2012-01-30 05:30:38