我有一个dinamically生成的代码,如下所示,列出了一些文件,让用户点击链接删除它们:
<div id="filenames">
<div>
<a id="1" class="delete" href="#1984.xls">1984.xls
</div>
<div>
<a id="2" class="delete" href="#1984.xml">1984.xml
</div>
</div>
每个文件都有自己的ID。当用户上传文件时,该列表通过AJAX生成。
当用户点击链接时,在将文件传递给“delete.php”调用之前,我希望有一个JSON对象列出所有这样的文件:
{1 : 1984.xls, 2 : 1984.xml}
我设法使用数组
var files = [];
$('#filenames').find('a').each(function() {
files.push($(this).attr('href'));
});
但这只是在数组中添加了存储在href
内的文件名。
我不知道如何find
同时id
和attr
如何创建JSON对象而不是数组。
答案 0 :(得分:2)
您可以通过以下方式执行此操作:
var files = {};
$('#filenames').find('a').each(function() {
files[$(this).attr('id')] = $(this).attr('href');
});
console.log(files);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="filenames">
<div>
<a id="1" class="delete" href="#1984.xls">1984.xls
</div>
<div>
<a id="2" class="delete" href="#1984.xml">1984.xml
</div>
</div>
答案 1 :(得分:1)
当
key
动态时,使用bracket-notation
为对象指定值!
将files
初始化为object({})
,而不是array
,因为您希望结果为object
注意: 如果您想从字符串中删除.substr(1);
,请使用#(first character)
。
var files = {};
$('#filenames').find('a').each(function(i) {
//files[i] = $(this).attr('href').substr(1);;//For index iteration as key
files[this.id] = $(this).attr('href').substr(1); //For ID attribute as key
});
console.log(files);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="filenames">
<div>
<a id="1" class="delete" href="#1984.xls">1984.xls</a>
</div>
<div>
<a id="2" class="delete" href="#1984.xml">1984.xml</a>
</div>
</div>
&#13;
答案 2 :(得分:1)
您必须使用object
(而不是{}
array
)创建[]
,然后在key:value
时将其files[key] = value
影响为key
id
是链接的value
和href
代表的var files = {};
$('#filenames').find('a').each(function() {
var key = $(this).attr('id');
var value = $(this).attr('href');
files[key] = value;
});
console.log(files);
,请查看以下示例。
希望这有帮助。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="filenames">
<div>
<a id="1" class="delete" href="#1984.xls">1984.xls
</div>
<div>
<a id="2" class="delete" href="#1984.xml">1984.xml
</div>
</div>
&#13;
function getCookiesMap(cookiesString) {
return cookiesString.split(";")
.map(function(cookieString) {
return cookieString.trim().split("=");
})
.reduce(function(acc, curr) {
acc[curr[0]] = curr[1];
return acc;
}, {});
}
&#13;
答案 3 :(得分:0)
请尝试此代码
var files = [];
item = {}
$('#filenames').find('a').each(function () {
item[$(this).attr('id')] = $(this).attr('href');
});
files.push(item);
console.log(files);