-1

当我使用 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 开发者工具,第一个选择器是这样的(并且有效)://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']"

4

2 回答 2

1

如果您希望查找具有特定属性的元素,input则不应使用此方法搜索作为您使用选择器字符串选择的元素的后代的元素:selectdata-dbidfind()

"#pumpConfigTable td:nth-child(" + (tdIndex + 1) + ") select,  #pumpConfigTable td:nth-child(" + (tdIndex + 1) + ") input"

您匹配的元素将是select元素和input元素。我认为我假设你想这个集合中找到特定元素是正确的?如果是这样,请尝试使用 jQuery 的filter()方法而不是 find。

.filter(选择器)

返回:jQuery

描述:将匹配元素的集合减少为匹配选择器或通过函数测试的元素。

所以你会这样做:

var categories = $(pcOptions).filter("[data-dbid='" + uniquedbIDs[i] + "']");
于 2012-09-12T13:50:17.397 回答
0

如果你想input拥有data-dbid='1'你需要删除两者之间的空间:

"#pumpConfigTable td:nth-child(2) select, #pumpConfigTable td:nth-child(2) input[data-dbid='1']"
于 2012-09-12T13:38:12.440 回答