-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 Developer Tools によると、最初のセレクターは次のようになります (そして動作します): //1"#pumpConfigTable td:nth-child(2) select, #pumpConfigTable td:nth-child(2) input"

2 番目のセレクターは次のようになります (そして機能しません): //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ます。このセット内の特定の要素を見つけたいと仮定するのは正しいと思いますか? filter()その場合は、find の代わりにjQuery のメソッドを使用してみてください。

.filter( セレクター )

戻り値: jQuery

説明: 一致する要素のセットを、セレクターに一致するもの、または関数のテストに合格するものに減らします。

したがって、次のようにします。

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

が必要な場合は、2 つの間のスペースを削除する必要がありますinputdata-dbid='1'

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