我有一个表格如下
<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。
我承认我很困惑!我今天一整天都在为此奋斗!没有线索!任何能够纠正我的勇敢的灵魂都是我的英雄!
丹尼斯
最佳答案
理想情况下,元素的 id 在页面上应该是唯一的。如果您遵循它们,则不需要 id 选择器的任何前缀来限制元素在页面上匹配。
在您的情况下,当您将 #div13
前缀为 #ckb1
时,jQuery 将在 # 中查找
否则它将在整个页面中搜索。当您不指定前缀 #ckb1
div13#div1
时,如果有多个具有相同 id 的元素,jQuery 将选择 id 匹配的第一个元素并将其包含在匹配的集合中。
关于javascript - jQuery 选择器规范不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9059588/