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

我不能这样使用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); } );

这将产生 ["Type something...", "Type something else..."]

您收到错误的原因是因为您试图使用对象语法访问数组。Javascript 数组只能有数字键......但是 javascript 中的所有内容都是一个对象,这就是为什么 myData['placeholders'] 显示为“未定义”而不是硬错误的原因。它所做的是检查数组原型链中的方法或属性“占位符”,而不是数组 myData 中的键“占位符”。

于 2012-11-08T22:09:40.167 回答