选择兄弟姐妹和父母与Cheerio

时间:2015-08-17 06:17:40

标签: javascript html select cheerio

我一直无法使用cheerio访问非常简单的HTML片段,我刚刚打开对象$(this)对象并准确追踪我需要的内容。现在,当堆栈中没有对象(如兄弟或孩子)时会发生错误。什么是选择以前的兄弟姐妹的正确方法,得到它的名字,href& amp;内容,以及父母的CSS。

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()

1 个答案:

答案 0 :(得分:2)

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

所以更好的方法是获取对目标元素的jQuery obeject引用,然后使用它来获取属性/属性值,如

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(),因此它可以返回一个数组