2015-09-05 71 views
4

我有类似这样查找和使用cheerio

<div class="form-row"> 
    <input type="text" id="foo1"> 
</div> 
<div class="form-row"> 
<input type="text" id="foo2"> 
</div> 
<div class="form-row"> 
    <input type="text" id="foo3"> 
</div> 

一个HTML片段替换某些属性,我想用cheerio的ID标签更改为foobar的[1,2,3]

我代码是

var cheerio = require("cheerio"); 
var $ = cheerio.load("html as above"); 

var inputs = $('input[id]'); 

Object.keys(inputs).forEach(function(key,index) { 
    if (key == index) { 
    console.log(key,inputs[key]) 
    //#1 
}); 

在这一点上(//#1),我想获得的id属性的值,并且根据在https://github.com/cheeriojs/cheerio的文档我可以使用。数据方法获取并改变属性在el EMENT,但

inputs[key].data("id") 

给了我一个“类型错误:未定义是不是一个函数”错误

我知道我失去了一些东西简单,但看不到树木,不见森林,并希望一些指针。

感谢

更新#1

当我以为我已经有了这样的抓地力,它从我的指间溜走..

现在

,我想移动一个元素:

我有

<label>xyz<i class="fa fa-list"></i></label> 

,我想

<label>xyz</label><i class="fa fa-list"></i> 

代码 - 不工作;) - 这是

var icons = $('label i'); 

icons.each(function(index,icon) { 
    // #2 now that I've got an element what now ? 
} 

我知道icons.remove()会删除元素(一个或多个),但挣扎让他们加入正确的地方。

回答

3

的问题是inputs[key])将是一个DOM元素的参考,这将不会有像data()

尝试方法来设置像

var cheerio = require("cheerio"); 
var $ = cheerio.load('<div class="form-row">\ 
    <input type="text" id="foo1">\ 
</div>\ 
<div class="form-row">\ 
<input type="text" id="foo2">\ 
</div>\ 
<div class="form-row">\ 
    <input type="text" id="foo3">\ 
</div>'); 

var inputs = $('input[id]'); 

inputs.attr('id', function(i, id){ 
    return id.replace('foo', 'foobar') 
}); 

console.log($.html()) 
+0

微米的属性值,哇,很好,工作 - 不能完全肯定或者为什么,但至少我有一些东西要看和理解;)谢谢。 – jmls

+0

我可以问另一个问题:我会使用类似的技术来重命名一个属性,还是更好地添加和删除?无论哪种方式,如何用这种技术来完成? – jmls

+0

@jmls你不能重命名一个属性...你可以删除并添加另一个 –