我的网页中有一个嵌套的HTML元素。我将数据从JSON文件读取到变量中。
obj将是一个具有以下属性的对象数组。名称、进度、描述和状态,以便以这种方式访问每个项目
obj[index].Name
obj[index].Progress
obj[index].Description
obj[index].Status我需要循环遍历每个div元素并设置数据。如何使用jQuery完成此操作。
对于示例:我需要循环遍历div(#row)中的每个信息框,并在以下元素中设置值
- <span class="info-box-text">NAME-1</span>
- <div class="progress-bar" style="width: 70%"></div>
- <span class="progress-description">PRODUCT-DESCRIPTION-1 </span>
- <span class="label label-info">PROGRESS-1</span>jQuery每个函数都应该通过以下HTML循环
<div class="row">
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<div class="info-box bg-yellow">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text">NAME-1</span>
<div class="progress">
<div class="progress-bar" style="width: 70%"></div>
</div>
<span class="progress-description">
PRODUCT-DESCRIPTION-1
</span>
<span class="label label-info">PROGRESS-1</span>
<span style="padding-left:5px" class="ion-person-stalker"> 5</span>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<div class="info-box bg-green">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text">NAME-2</span>
<div class="progress">
<div class="progress-bar" style="width: 85%"></div>
</div>
<span class="progress-description">
PRODUCT-DESCRIPTION-2
</span>
<span class="label label-success">PROGRESS-2</span>
<span style="" class="ion-person-stalker"> 8</span>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<div class="info-box bg-red">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text">NAME-3</span>
<div class="progress">
<div class="progress-bar" style="width: 70%"></div>
</div>
<span class="progress-description">
PRODUCT-DESCRIPTION-3
</span>
<span class="label label-success">PROGRESS-3</span>
<span style="" class="ion-person-stalker"> 15</span>
</div>
<!-- /.info-box-content -->
</div>
</div>
</div>
</div>发布于 2016-03-29 09:06:46
如果要将属性从html读取到JSON对象,可以这样做:有关结果,请参见控制台
$(function(){
var obj = {};
for(var i=0;i<$('.item').length;i++){
obj[i] = {
Name : $('.item').eq(i).find('.info-box-text').html(),
Progress : $('.item').eq(i).find('.progress-bar').html(),
Description : $('.item').eq(i).find('.progress-description').html(),
Status : $('.item').eq(i).find('.status').html()
}
};
console.log(obj);
})<link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://getbootstrap.com/dist/js/bootstrap.min.js"></script>
<div class="row">
<div class="col-md-3 col-sm-6 col-xs-12 item">
<div class="info-box">
<div class="info-box bg-yellow">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text">NAME-1</span>
<div class="progress">
<div class="progress-bar" style="width: 70%">70</div>
</div>
<span class="progress-description">PRODUCT-DESCRIPTION-1</span>
<span class="label label-info status">PROGRESS-1</span>
<span style="padding-left:5px" class="ion-person-stalker"> 5</span>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-xs-12 item">
<div class="info-box">
<div class="info-box bg-green">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text">NAME-2</span>
<div class="progress">
<div class="progress-bar" style="width: 85%">85</div>
</div>
<span class="progress-description">PRODUCT-DESCRIPTION-2</span>
<span class="label label-success status">PROGRESS-2</span>
<span style="" class="ion-person-stalker"> 8</span>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-xs-12 item">
<div class="info-box">
<div class="info-box bg-red">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text">NAME-3</span>
<div class="progress">
<div class="progress-bar" style="width: 70%">70</div>
</div>
<span class="progress-description">PRODUCT-DESCRIPTION-3</span>
<span class="label label-success status">PROGRESS-3</span>
<span style="" class="ion-person-stalker"> 15</span>
</div>
<!-- /.info-box-content -->
</div>
</div>
</div>
</div>
如果您想从JSON对象中添加html元素,那么:
使用js创建要添加的div字符串,例如,我编写了一个函数(makeText),并在其中生成html元素。
//for exmaple :
var obj = [
{Name:'Name1',Progress:'Progress1',Description:'Description1',Status:'Status1'},
{Name:'Name2',Progress:'Progress2',Description:'Description2',Status:'Status2'},
{Name:'Name3',Progress:'Progress3',Description:'Description3',Status:'Status3'},
{Name:'Name4',Progress:'Progress4',Description:'Description4',Status:'Status4'},
{Name:'Name5',Progress:'Progress5',Description:'Description5',Status:'Status5'},
]
for( var x in obj){
$('.appendToHere').append(makeText(obj[x].Name,obj[x].Progress,obj[x].Description,obj[x].Status));
}
function makeText(Name,Progress,Description,Status){
return('<div class="col-md-3 col-sm-6 col-xs-12"><div class="info-box"><div class="info-box bg-yellow"><span class="info-box-icon"><i class="ion ion-filing"></i></span><div class="info-box-content"><span class="info-box-text">'+Name+'</span><div class="progress"><div class="progress-bar" style="width: 70%"></div></div><span class="progress-description">'+Description+'</span><span class="label label-info">'+Progress+'</span><span style="padding-left:5px" class="ion-person-stalker"> '+Status+'</span></div></div></div></div>');
}<link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://getbootstrap.com/dist/js/bootstrap.min.js"></script>
<div class="row appendToHere"></div>
发布于 2016-03-29 08:48:30
由于每个“内容框”或内容部分(名称等)没有唯一的类名,因此需要添加以下内容。然后,您可以简单地循环使用:
$('.itembox').each(function() {
console.log($(this).find('.itemname').html()); --debug print
// TODO here you can set/get or do want you want for each content value
//$(this).find('.itemdecription')... etc
});所需的更改是将(例如)类"itembox“添加到每个主项框中,并在每个span中添加"itemname”以表示名称。诸如此类的其他内容,你想要找到(描述等)。
示例:
<div class="info-box itembox">
<div class="info-box bg-yellow">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text itemname">NAME-1</span>
<div class="progress">
<div class="progress-bar" style="width: 70%"></div>
</div>
<span class="progress-description">
PRODUCT-DESCRIPTION-1
</span>
<span class="label label-info">PROGRESS-1</span>
<span style="padding-left:5px" class="ion-person-stalker"> 5</span>
</div>
</div>
</div>发布于 2016-03-29 09:54:49
下面所示的蛮力法起作用。它简单地循环遍历每个类并写入相应的数据元素。请参阅jQuery.each()
然而,如果您期望您的数据增长超过3行,那么模板(如注释中所建议的)将是一个更加健壮的解决方案。
显示并运行代码片段以尝试
function updateUI( data ) {
$('.info-box-text').each(function(i, o) {
$(o).html(data[i].Name || '');
});
$('.progress-bar').each(function(i, o) {
$(o).html(data[i].Progress || '');
});
$('.progress-description').each(function(i, o) {
$(o).html(data[i].Description || '');
});
$('.label').each(function(i, o) {
$(o).html(data[i].Status || '');
});
};
function updateUI( data ) {
$('.info-box-text').each(function(i, o) {
$(o).html(data[i].Name || '');
});
$('.progress-bar').each(function(i, o) {
$(o).html(data[i].Progress || '');
});
$('.progress-description').each(function(i, o) {
$(o).html(data[i].Description || '');
});
$('.label').each(function(i, o) {
$(o).html(data[i].Status || '');
});
};
$(document).ready(function() {
// generate test data
var i, data = [];
for (i = 0; i < 3; i++) {
data.push({
Name: 'Name-' + i,
Progress: 'Progress-' + i,
Description: 'Description-' + i,
Status: 'Status-' + i
});
}
updateUI( data );
window.debug.innerHTML = JSON.stringify( data, false, ' ');
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="row">
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<div class="info-box bg-yellow">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text">NAME-1</span>
<div class="progress">
<div class="progress-bar" style="width: 70%"></div>
</div>
<span class="progress-description">
PRODUCT-DESCRIPTION-1
</span>
<span class="label label-info">PROGRESS-1</span>
<span style="padding-left:5px" class="ion-person-stalker"> 5</span>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<div class="info-box bg-green">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text">NAME-2</span>
<div class="progress">
<div class="progress-bar" style="width: 85%"></div>
</div>
<span class="progress-description">
PRODUCT-DESCRIPTION-2
</span>
<span class="label label-success">PROGRESS-2</span>
<span style="" class="ion-person-stalker"> 8</span>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<div class="info-box bg-red">
<span class="info-box-icon"><i class="ion ion-filing"></i></span>
<div class="info-box-content">
<span class="info-box-text">NAME-3</span>
<div class="progress">
<div class="progress-bar" style="width: 70%"></div>
</div>
<span class="progress-description">
PRODUCT-DESCRIPTION-3
</span>
<span class="label label-success">PROGRESS-3</span>
<span style="" class="ion-person-stalker"> 15</span>
</div>
<!-- /.info-box-content -->
</div>
</div>
</div>
</div>
<h3>JSON:</h3>
<xmp id="debug"></xmp>
https://stackoverflow.com/questions/36278949
复制相似问题