我试图使用维基百科API提取一些信息。响应是一个包含所有部分HTML的超级字符串。在回复中,我想要从第一个li
中提取前3个ul
,并且最好不要将其写入文档,直到我和#39;完成提取。
我一直在修补不同的jquery功能组合,但是没有多少运气。对我来说最有意义的是:
var markup = $('<div>' + response + '</div>').find('ul:lt(3)').html();
$('body').append(markup);
只有:lt()
过滤器似乎仅适用于ul
而不是li
,即使.find()
仅选择后代。我可能会过度思考这个问题,但你们有什么想法吗?
答案 0 :(得分:2)
您可以通过多种方式执行此操作,例如,首先.find()
ul元素,然后获取一些.children()
:
var markup = $('<div>' + response + '</div>').find('ul:first')
.children('li:lt(3)').html();
...或使用其他选择器:
.find('ul:first > li:lt(3)').html()
来自你的评论:
“我如何选择ul和第一个li而不仅仅是li?”
如果选择ul,它会自动包含它的所有子节点(也就是说,生成的jQuery对象将包含一个元素ul,但ul将保留其子节点),因此您可以删除不需要的子节点:
var markup = $('<div>' + response + '</div>').find('ul:first');
markup.children('li:gt(2)').remove();
$('body').append(markup);
请注意,在最新的代码中,我没有使用.html()
方法,因为这只会提取ul的内容,即li元素,而不是ul元素本身。