我有一个像这样的几个div的页面
<div class="market_listing_row" id="12345">
...
<div class="priceblock">
<span class="price">0,0</span>
</div>
</div>
我想为每个人创建一个JS对象数组:
[{ id: '12345', price: '0,0'}]
如何迭代这些div?我尝试用jQuery和原始JS来做,但失败了。
编辑: 显然CasperJS和jQuery一起造成混乱,可能是因为'this'。无论哪种方式,我找到了一种使用casper模块方法处理问题的方法:
var price = this.fetchText('div.market_listing_row .price').split('\n');
var id = this.getElementsAttribute('div.market_listing_row', 'id');
这会创建两个数组:价格和ID。
答案 0 :(得分:2)
我建议:
var objArray = $('.market_listing_row').map(function () {
return {
'id': this.id,
'price': $(this).find('.price').text()
};
}).get();
参考文献:
答案 1 :(得分:1)
尝试,
xResult = [];
$('.market_listing_row').each(function(){
var xJson = {};
xJson.id = $(this).attr('id');
xJson.price = $(this).find('.price').text();
xResult[xResult.length] = xJson;
});
答案 2 :(得分:1)
我使用以下代码在小提琴上做了一个非常基本的例子。
var arr = [];
$('.market_listing_row').each(function(){
id = $(this).attr('id');
price = $(this).find('.price').text();
arr.push({id: id, price: price});
});
如果您有任何疑问,请与我们联系。希望这有帮助!
答案 3 :(得分:1)
H i,将原生(原始js)版本投入混合。 http://jsfiddle.net/sD67h/1/
借助:
function $class(str,_scope) {
if(!_scope) { _scope=document; }
var elems = _scope.getElementsByTagName('*'), elArray =[];
var len=elems.length;
for (var cnt = 0; cnt < len; ++cnt) {
if((' ' + elems[cnt].className + ' ').indexOf(' ' + str + ' ') > -1) {
elArray.push(elems[cnt]);
}
}
return elArray;
}
为了适合您的标记设置,可以像这样使用:
function getPriceObjects() {
var marketrows = $class("market_listing_row"), marketArray=[];
for (var i = 0, len=marketrows.length; i < len; ++i) {
var id = marketrows[i].getAttribute("id");
var price = $class("price",marketrows[i])[0].innerHTML;
marketArray.push({ id: id, price: price});
}
return marketArray;
}
var marketPriceArray = getPriceObjects();