我一直无法使用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()
答案 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()
,因此它可以返回一个数组