-2

テーブルの各行をループしてjsonオブジェクトを作成するコードがいくつかあります。行の要素は、次のいずれかになります。

<input type="text" id="myelem"/>

また

<p id="myelem">foo</p>

id両方の属性が同じであることに注意してください。これは、Add a new Rowこのボタンをクリックするとテーブルにボタンがあり、チェックボックスが付いた別の行がテーブルに追加されるためです。ユーザーがフォームを送信すると、チェックボックスが消え、入力した値が次のようになります。<p id="myelem">value they entered</p>

以下は私がこれに使用しているコードです。

    $('.input-row').each(function(index, row) {
        var innerObject = {};
        var key = $('#myelem', row).val().toUpperCase();
        jsonObject[key] = "bar";
    });

関数を使用しているため、上記はテキストボックスで正常に.val()機能します。ただし、行にデータが含まれている場合、その行からデータを取得するにはどうすればよいです<p id="myelem">foo</p>か?

私の擬似コードは次のようになります。

    $('.input-row').each(function(index, row) {
        var innerObject = {};
        /*
        if #myelem is a text box then use .val()
        if #myelem is a <p> tag then use .html()
        */
        var key = $('#myelem', row).val().toUpperCase();
        jsonObject[key] = "bar";
    });
4

6 に答える 6

3

id■ページ上で常にグローバルに一意である必要があります。複数の要素を参照する必要がある場合は、を使用する必要がありますclasses。ではなくとして設定myelemした場合は、次のように参照できますclassid

$('.input-row .myelem')
于 2013-03-12T17:45:24.603 に答える
1

要素がどのタイプであるかを確認できます

var value = null;
if($('#myid').is('input')) {
    value = $('#myid').val();
}
else if($('#myid').is('p')) {
    value = $('#myid').html();
}
于 2013-03-12T17:49:42.287 に答える
0

IDは一意です。同じページで複数のIDを使用することはできません。その場合、使用する要素をどのように決定する必要がありますか?

于 2013-03-12T17:47:40.303 に答える
0

これは、開始するためのものです。.eachクラスで使用しinput-rowていますが、提供したコードでクラスを表示していません。この例では、id の代わりに class を使用しました。前向きに取り組むためにご利用ください。

フィドル

于 2013-03-12T18:06:27.603 に答える
0

たとえば、jQuery is() を使用できますif $('#myelem').is ('p'){...}

于 2013-03-12T17:51:17.727 に答える
0

それでも開発方法に固執したい場合は、以下が役立ちます。

$('.input-row').each(function(index, row) {
    var innerObject = {};
    var c = $('#myelem', row);
    var isInputField = c.get(0).tagName.toUpperCase()=="INPUT";
    var key =isInputField ? c.val().toUpperCase():c.html().toUpperCase();
    jsonObject[key] = "bar";
});
于 2013-03-12T17:58:39.997 に答える