Javascript 获取两个元素之间的内容
我有HTML字符串,我需要从中提取HTML子字符串(摘要、关键字等)。字符串如下所示:Javascript 获取两个元素之间的内容,javascript,jquery,cheerio,Javascript,Jquery,Cheerio,我有HTML字符串,我需要从中提取HTML子字符串(摘要、关键字等)。字符串如下所示: const content = "<p> <strong>Summary</strong><br />Some text with <strong>HTML</strong> tags...<br /><br /> <strong>Keywords</strong> keyword1, ke
const content = "<p>
<strong>Summary</strong><br />Some text with <strong>HTML</strong> tags...<br /><br />
<strong>Keywords</strong> keyword1, keyword2,...<br /><br />
...
</p>"
使用foreach的nextUntil():
const $ = cheerio.load(content);
let container = $('<container/>');
for (let i = 0; i < $("strong:contains('Summary')").nextUntil( "strong:contains('Keywords')" ).length; i++) {
container.append($("strong:contains('Summary')").nextUntil( "strong:contains('Keywords')" )[i]);
}
console.log('container: ', container.html());
// Returns: "<strong>Summary</strong>"
const$=cheerio.load(内容);
让容器=$('');
for(设i=0;i<$(“strong:contains('Summary')))。nextUntil(“strong:contains('Keywords')))。长度;i++){
container.append($($strong:contains('Summary'))).nextUntil($strong:contains('Keywords')))[i]);
}
log('container:',container.html());
//返回:“摘要”
我认为问题源于摘要和关键字文本不是它们各自标题的同级
您可以改为使用正则表达式解析HTML字符串
const content = '<p>' +
'<strong>Summary</strong><br />Some text with <strong>HTML</strong> tags...<br /><br />' +
'<strong>Keywords</strong> keyword1, keyword2,...<br /><br />' +
'</p>';
var summary = content.match('<strong>Summary</strong><br />(.*?)<br /><br />');
var keywords = content.match('<strong>Keywords</strong> (.*?)<br /><br />');
alert (summary[1]);
alert (keywords[1]);
const content=''+
“摘要
一些带有HTML标记的文本…
”+
“关键字关键字1,关键字2,…
”+
“”;
var summary=content.match(“summary
(.*?
”);
var keywords=content.match('关键字(.*)
');
警报(摘要[1]);
警报(关键词[1]);
我认为问题源于摘要和关键字文本不是它们各自标题的同级
您可以改为使用正则表达式解析HTML字符串
const content = '<p>' +
'<strong>Summary</strong><br />Some text with <strong>HTML</strong> tags...<br /><br />' +
'<strong>Keywords</strong> keyword1, keyword2,...<br /><br />' +
'</p>';
var summary = content.match('<strong>Summary</strong><br />(.*?)<br /><br />');
var keywords = content.match('<strong>Keywords</strong> (.*?)<br /><br />');
alert (summary[1]);
alert (keywords[1]);
const content=''+
“摘要
一些带有HTML标记的文本…
”+
“关键字关键字1,关键字2,…
”+
“”;
var summary=content.match(“summary
(.*?
”);
var keywords=content.match('关键字(.*)
');
警报(摘要[1]);
警报(关键词[1]);
这里有一种不同的方法;有点老套,但很有效:
const content=`
摘要
一些带有HTML标记的文本…
关键字关键字1,关键字2,…
...
`,
html=$(内容);
const summary=getHtml(html.find(“strong:contains(summary)”);
const-keywords=getHtml(html.find(“strong:contains(keywords)”);
控制台日志(摘要);
console.log(关键字);
函数getHtml(html){
const summary=[];
让currentEl=html.prop(“nextSibling”);
while(true){
//如果当前和下一个元素都是
,则到达终点
if(currentEl.tagName==“BR”&¤tEl.nextSibling.tagName==“BR”){
//如果这是“关键字”,则不要添加后面的
元素
如果(html.text().trim()!=“关键字”){
//push(“
”)也可以在这里使用
summary.push(currentEl.outerHTML,currentEl.nextSibling.outerHTML);
}
返回summary.join(“”.trim();
}否则{
//节点类型1=元素
//节点类型3=文本
const content=currentEl.nodeType==1?currentEl.outerHTML:currentEl.textContent;
//按HTML字符串并继续
推送(内容);
currentEl=currentEl.nextSibling;
}
}
}
这里有一种不同的方法;有点老套,但很有效:
const content=`
摘要
一些带有HTML标记的文本…
关键字关键字1,关键字2,…
...
`,
html=$(内容);
const summary=getHtml(html.find(“strong:contains(summary)”);
const-keywords=getHtml(html.find(“strong:contains(keywords)”);
控制台日志(摘要);
console.log(关键字);
函数getHtml(html){
const summary=[];
让currentEl=html.prop(“nextSibling”);
while(true){
//如果当前和下一个元素都是
,则到达终点
if(currentEl.tagName==“BR”&¤tEl.nextSibling.tagName==“BR”){
//如果这是“关键字”,则不要添加后面的
元素
如果(html.text().trim()!=“关键字”){
//push(“
”)也可以在这里使用
summary.push(currentEl.outerHTML,currentEl.nextSibling.outerHTML);
}
返回summary.join(“”.trim();
}否则{
//节点类型1=元素
//节点类型3=文本
const content=currentEl.nodeType==1?currentEl.outerHTML:currentEl.textContent;
//按HTML字符串并继续
推送(内容);
currentEl=currentEl.nextSibling;
}
}
}
使用nextUntil()
的方法不起作用,因为给定的
DOM元素没有包含任何可用内容(html)的同级元素。相反,在父元素的
元素中只能找到文本内容
我们必须应用某种正则表达式匹配方法,如下图所示(请注意,如果摘要
和关键字
部分出现不止一次,则只会考虑每个部分最近出现的情况):
const content=$(“\n\
摘要
一些带有\n\HTML标记的文本…
\n\
关键字关键字1,关键字2,…
\n\
…\n\
”).html();//我使用jquery-html()来提取外部元素的innerHTML
const arr=content.split(/(摘要|关键字)/);
对于(var i=1;i使用nextUntil()
的方法不起作用,因为给定的
DOM元素没有包含任何可用内容(html)的同级元素。相反,只有textContent可以作为父元素
元素的一部分找到
我们必须应用某种正则表达式匹配方法,如下图所示(请注意,如果摘要
和关键字
部分出现不止一次,则只会考虑每个部分最近出现的情况):
const conten
const content = '<p>' +
'<strong>Summary</strong><br />Some text with <strong>HTML</strong> tags...<br /><br />' +
'<strong>Keywords</strong> keyword1, keyword2,...<br /><br />' +
'</p>';
var summary = content.match('<strong>Summary</strong><br />(.*?)<br /><br />');
var keywords = content.match('<strong>Keywords</strong> (.*?)<br /><br />');
alert (summary[1]);
alert (keywords[1]);