为什么.find在JQuery中使用第二个css选择器?

时间:2012-09-12 13:35:50

标签: javascript jquery css jquery-selectors

当我使用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']"

2 个答案:

答案 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']"