1

私はいくつかのliを持っています:

<ul>
    <li class="one">
        <input type="text" class="form_input" placeholder="Type something...">
    </li>
    <li class="two">
        <input type="text" class="form_input" placeholder="Type something else...">
    </li>
</ul>

次のような配列を作成しようとしています:

[
    0[
        'placeholder' : 'Type something...'
    ]
    1[
        'placeholder' : 'Type something else...'
    ]
]

私はこのような方法を使用します

var lineText = function(elements) {
var myData = new Array();

elements.each(function(index, data) {
    var li = $(this);

    myData["placeholder"] = li.find('.form_input').attr("placeholder");

            console.log(data); returns the li objects
});

console.log(myData);
};

これから[placeholder: "Type something..."]、基本的に配列内の 2 項目ではなく 1 項目を取得します

私はpushこのように使用できません:

myData["placeholder"].push(li.find('.form_input').attr("placeholder")); //Cannot call method 'push' of undefined 

または配列に別の次元を追加します

myData[index]["placeholder"] = li.find('.form_input').attr("placeholder"); //Cannot set property 'placeholder' of undefined 

何か案は?ありがとう

4

2 に答える 2

3

「連想配列」の配列が必要なようです。連想配列の代わりに JavaScript を使用すると、オブジェクトを同じように動作させることができます。上記の配列を意味すると、リテラル構文では次のようになります。

var a = [ { 'placeholder': 'Type something...' },
          { 'placeholder': 'Type something else...' } ];

どこa[ 0 ][ 'placeholder' ]で文字列を返します'Type something...'。これはオブジェクトを使用するため、いくつかのキーが必要なためプロパティをプッシュできません。代わりに、次のように記述しますa.push( { 'placeholder': 'Type more stuff...' } )

配列にプレースホルダーを追加するだけの場合は、オブジェクトを使用する必要はありません。このように文字列の配列を作成するだけです。

var placeholders = [ 'Type something...', 'Type something else...' ];

しかし、私の最初のソリューションを使用すると、関数は次のようになります

var lineText = function(elements) {
    var myData = new Array();

    elements.each(function(index, data) {
        var li = $(this);
        var placeholderData = new Object();

        placeholderData["placeholder"] = li.find('.form_input').attr("placeholder");
        myData.push(placeholderData);
        console.log(data); returns the li objects
    });

    console.log(myData);
};

ここのライブ例http://jsfiddle.net/vU36T/6/

于 2012-11-08T22:10:37.367 に答える
2

これはうまくいくはずです:

var placeholders = [];
$('ul > li > input').each( function(index, el){ placeholders.push(el.placeholder); } );

これにより、[「何かを入力してください...」、「他の何かを入力してください...」]が生成されます

エラーが発生した理由は、オブジェクト構文で配列にアクセスしようとしたためです。Javascript 配列は数値キーのみを持つことができます...ただし、javascript のすべてはオブジェクトであるため、myData['placeholders'] はハード エラーではなく「未定義」として表示されます。これが行っているのは、配列 myData のキー「プレースホルダー」ではなく、メソッドまたはプロパティ「プレースホルダー」の配列プロトタイプ チェーンをチェックすることです。

于 2012-11-08T22:09:40.167 に答える