选择兄弟姐妹和父母与Cheerio一起



我一直无法使用cheerio访问真正简单的HTML片段,我刚刚打开对象$(this)对象并准确地跟踪了我需要的内容。现在,如果堆栈中没有对象,比如兄弟或子对象,就会发生错误。选择前一个兄弟结点的正确方法是什么,获取它的名字,href &

var code = $('code.lang-javascript, code.lang-js')
dataSet.blocks = []
code.map(function (i, elm) {
  var block = {}
  block.prevSiblingTag = $(this).parent().prev()[0].children[0].name
  block.prevSiblingHref = $(this).parent().prev()[0].children[0].attribs.href
  block.prevSiblingContent = $(this).parent().prev()[0].children[0].text()
  block.parentTag = $(this)[0].name
  block.parentClass = $(this)[0].attribs.class
  block.code = $(this).html()
  dataSet.blocks.push(block)
})

我正在做这个,它只是一个烂摊子。

var $parent = $($(this).parent().html())
var $prevSibling = $($(this).parents().prev())
var block = {}
block.parentClass = $parent.attr('class')
block.prevSibling = $prevSibling.html()
block.code = $(this).html()

问题是,如果前一个兄弟姐妹没有子节点,那么$(this).parent().prev()[0]将为空。

所以最好是获取目标元素的jQuery对象引用然后使用它获取属性/属性值,比如
var code = $('code.lang-javascript, code.lang-js')
dataSet.blocks = code.map(function (i, elm) {
    var block = {}, $this = $(this),
        target = $this.parent().prev().children().eq(0);
    block.prevSiblingTag = target.attr('name');
    block.prevSiblingHref = target.attr('href');
    block.prevSiblingContent = target.text()
    block.parentTag = this.name
    block.parentClass = $this.attr('class')
    block.code = $this.html()
    return block;
}).get();

也因为你正在使用.map(),它可以返回一个数组

最新更新