使用cheerio查找并替换某些属性

时间:2015-09-05 08:55:53

标签: javascript html-parsing cheerio

我有一个与此类似的HTML片段

 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
 });

我想使用cheerio将id标签更改为foobar [1,2,3]

我的代码是

inputs[key].data("id")

此时(//#1),我想获取id属性的值,并根据git clone处的文档,我可以使用.data方法来获取和更改元素,但

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

给了我一个&#34; TypeError:undefined不是一个函数&#34;错误

我知道我错过了一些简单的东西,但却看不到树木的木材,并会欣赏一些指示。

感谢

更新#1

当我认为我抓住了它时,它会从我的手指上滑落......

现在,我想移动一个元素:

我有

<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 ?
}

代码 - 不起作用;) - 是这个

{{1}}

我知道icons.remove()会删除元素,但很难将它们添加到正确的位置。

1 个答案:

答案 0 :(得分:4)

问题是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())