当我使用name = value选择器执行.find时,我没有得到任何元素。我的语法看起来正确,我看不出我做错了什么。我知道它正在选择的对象有元素,7确切地说,具有我正在寻找的属性。所以我很难理解为什么.find无效。
页面上的Javascript:
$(document).ready(function () {
var mainCatName = 'category.SelectedValue'
$('#Button1').on('click', function () {
var td = $('input[name="' + mainCatName + '"]:checked').parent('td');
var tdIndex = td.index();
if (selectElems == null) {
//1
selectElems = $("#pumpConfigTable td:nth-child(" + (tdIndex + 1) + ") select, #pumpConfigTable td:nth-child(" + (tdIndex + 1) + ") input");
}
var projectInfoID = $('#ProjectInfoID').attr('value');
var mainCategoryID = $('input[name="' + mainCatName + '"]:checked').attr('value');
var postBackObject = makeProjectInfoObjects(projectInfoID, mainCategoryID, selectElems);
var blah = "blah";
});
});
makeProjectInfoObjects的部分源代码:
function makeProjectInfoObjects(pInfoID, mainCatID, pcOptions) {
//var pc = new PumpConfig();
var pc = new Array();
var dbIDs = _.pluck(pcOptions, "data-dbid");
var uniquedbIDs = _.unique(dbIDs);
uniquedbIDs = _.reject(uniquedbIDs, function (checkID) { return checkID == undefined; });
var len = uniquedbIDs.length;
for (var i = 0; i < len; ++i) {
//2
var categories = $(pcOptions).find("[data-dbid='" + uniquedbIDs[i] + "']");
var uniqueNames = _.pluck(categories, "name");
var singleOptions = $(categories).find(':not([name]');
var soLen = singleOptions.length;
for (var j = 0; j < soLen; ++j) {
pc.push({
pcID: uniquedbIDs[i],
pInfoID: pInfoID,
configCatID: mainCatID,
configSubCatID: $(singleOptions[i]).attr('data-subcatid'),
configValue: $(singleOptions[i]).attr('value')
});
我在XP上使用JQuery 1.8.1和IE8。
根据IE Developer Tools,第一个选择器就是这样(它可以工作):
// 1 "#pumpConfigTable td:nth-child(2) select, #pumpConfigTable td:nth-child(2) input"
第二个选择器就是这个(它不起作用):
// 2 "#pumpConfigTable td:nth-child(2) select, #pumpConfigTable td:nth-child(2) input [data-dbid='1']"
答案 0 :(得分:1)
如果您希望查找具有特定属性input
的{{1}}和select
元素,则不应使用data-dbid
,因为此方法会搜索后代:
find()
您的匹配元素将是"#pumpConfigTable td:nth-child(" + (tdIndex + 1) + ") select, #pumpConfigTable td:nth-child(" + (tdIndex + 1) + ") input"
元素和select
元素。我想我认为你想要找到在这个集合中的特定元素是正确的吗?如果是这样,请尝试使用jQuery的input
方法而不是find。
.filter(选择器)
返回:jQuery
描述:将匹配元素集合减少到与选择器匹配的元素或通过函数测试。
所以你会这样做:
filter()
答案 1 :(得分:0)
如果您希望input
拥有data-dbid='1'
,则需要删除两者之间的空格:
"#pumpConfigTable td:nth-child(2) select, #pumpConfigTable td:nth-child(2) input[data-dbid='1']"