我一直无法使用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]
将为空。
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()
,它可以返回一个数组