获取 div jquery 中最后一个 br 之前的文本
Get text before the last br in div jquery
大家好,我在 html
<div class="flexmls_connect__sr_address">
<div class="flexmls_connect__ld_price">,000,000</div>
Km. 16.5 Carr. Barra de Navidad, Villa Armonia Estate
<br>
Puerto Vallarta, JA
<br>MLS# 11187
<br>//NEED THIS NUMBER---- >5 beds | //AND THIS NUMBER---- >8 baths | 11836 sqft
<br>
</div>
这在 jquery
var baths = $(res).find('.flexmls_connect__sr_address').before('br').last().contents().filter(function() {
return this.nodeType == 3;
}).text();
我需要获得床和浴室,并且我的 html 代码不是我从一个非常古老的 API 获得的,我无法更改 HTML,我需要只有 jquery 或 javascript 的值。我的回答不是必需的,欢迎所有方法,我只尝试了很多主题,最后一个是在最后一个标签之前获取文本 br 但任何帮助都很棒,谢谢 :D
您必须找到文本节点内容:
在此示例中 //NEED THIS NUMBER---- >5 beds | //AND THIS NUMBER---- >8 baths | 11836 sqft
然后删除除数字和 | 之外的所有字符带有正则表达式的字符,例如:
var textNodeContent = '//NEED THIS NUMBER---- >5 beds | //AND THIS NUMBER---- >8 baths | 11836 sqft',
stripped = textNodeContent.replace(/[^0-9\|]/g, '');
// the result will be 5|8|11836
before()
是一种dom插入方式。可以做类似下面的事情
var specs = $('.flexmls_connect__sr_address').contents().filter(function() {
return this.nodeType == 3 && $(this).text().indexOf('beds')>-1;
}).text().split('|').reduce(function(a,c){
if(c.indexOf('beds')>-1){
a.beds = /\d+/.exec(c)[0]
}else if(c.indexOf('baths')>-1){
a.baths = /\d+/.exec(c)[0]
}
return a
},{});
console.log(specs);
console.log('Property has ', specs.baths, ' baths and ', specs.beds, ' beds');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="flexmls_connect__sr_address">
<div class="flexmls_connect__ld_price">,000,000</div>
Km. 16.5 Carr. Barra de Navidad, Villa Armonia Estate
<br>
Puerto Vallarta, JA
<br>MLS# 11187
<br>5 beds | 8 baths | 11836 sqft
<br>
</div>
如果您 HTML 遵循与示例中相同的格式,那么您可以通过选择每个 div.flexmls_connect__sr_address
块的内部 HTML 并使用 split()
在每个 <br>
。您需要的文本始终是该列表中的倒数第二个项目,而这又可以是每个 |
处的 split()
,就像这样...
$('.flexmls_connect__sr_address').each(function() {
// get innerHTML and split into array
var block = $(this).html().split('<br>');
// split second-last line into array
var line = block[block.length - 2].split(' | ');
// report to console
console.log(' beds:',line[0].trim());
console.log('baths:',line[1].trim());
console.log(' sqft:',line[2].trim());
console.log('----');
});
如前所述 elsewhere,然后您可以根据需要使用正则表达式从 line
中的每个项目中获取数字。即..
var beds = line[0].replace(/\D+/g, "");
希望对您有所帮助。 :)
试试这个(假设信息在 div 中的第 3 个 "break" 标签之后可用)。"flexmls_connect__sr_address" :
document.getElementsByClassName('flexmls_connect__sr_address')[0].getElementsByTagName("br")[2].nextSibling.data.split("|");
这是您会得到的回复 [“5 张床”、“8 个浴室”、“11836 平方英尺↵”]
大家好,我在 html
<div class="flexmls_connect__sr_address">
<div class="flexmls_connect__ld_price">,000,000</div>
Km. 16.5 Carr. Barra de Navidad, Villa Armonia Estate
<br>
Puerto Vallarta, JA
<br>MLS# 11187
<br>//NEED THIS NUMBER---- >5 beds | //AND THIS NUMBER---- >8 baths | 11836 sqft
<br>
</div>
这在 jquery
var baths = $(res).find('.flexmls_connect__sr_address').before('br').last().contents().filter(function() {
return this.nodeType == 3;
}).text();
我需要获得床和浴室,并且我的 html 代码不是我从一个非常古老的 API 获得的,我无法更改 HTML,我需要只有 jquery 或 javascript 的值。我的回答不是必需的,欢迎所有方法,我只尝试了很多主题,最后一个是在最后一个标签之前获取文本 br 但任何帮助都很棒,谢谢 :D
您必须找到文本节点内容:
在此示例中 //NEED THIS NUMBER---- >5 beds | //AND THIS NUMBER---- >8 baths | 11836 sqft
然后删除除数字和 | 之外的所有字符带有正则表达式的字符,例如:
var textNodeContent = '//NEED THIS NUMBER---- >5 beds | //AND THIS NUMBER---- >8 baths | 11836 sqft',
stripped = textNodeContent.replace(/[^0-9\|]/g, '');
// the result will be 5|8|11836
before()
是一种dom插入方式。可以做类似下面的事情
var specs = $('.flexmls_connect__sr_address').contents().filter(function() {
return this.nodeType == 3 && $(this).text().indexOf('beds')>-1;
}).text().split('|').reduce(function(a,c){
if(c.indexOf('beds')>-1){
a.beds = /\d+/.exec(c)[0]
}else if(c.indexOf('baths')>-1){
a.baths = /\d+/.exec(c)[0]
}
return a
},{});
console.log(specs);
console.log('Property has ', specs.baths, ' baths and ', specs.beds, ' beds');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="flexmls_connect__sr_address">
<div class="flexmls_connect__ld_price">,000,000</div>
Km. 16.5 Carr. Barra de Navidad, Villa Armonia Estate
<br>
Puerto Vallarta, JA
<br>MLS# 11187
<br>5 beds | 8 baths | 11836 sqft
<br>
</div>
如果您 HTML 遵循与示例中相同的格式,那么您可以通过选择每个 div.flexmls_connect__sr_address
块的内部 HTML 并使用 split()
在每个 <br>
。您需要的文本始终是该列表中的倒数第二个项目,而这又可以是每个 |
处的 split()
,就像这样...
$('.flexmls_connect__sr_address').each(function() {
// get innerHTML and split into array
var block = $(this).html().split('<br>');
// split second-last line into array
var line = block[block.length - 2].split(' | ');
// report to console
console.log(' beds:',line[0].trim());
console.log('baths:',line[1].trim());
console.log(' sqft:',line[2].trim());
console.log('----');
});
如前所述 elsewhere,然后您可以根据需要使用正则表达式从 line
中的每个项目中获取数字。即..
var beds = line[0].replace(/\D+/g, "");
希望对您有所帮助。 :)
试试这个(假设信息在 div 中的第 3 个 "break" 标签之后可用)。"flexmls_connect__sr_address" :
document.getElementsByClassName('flexmls_connect__sr_address')[0].getElementsByTagName("br")[2].nextSibling.data.split("|");
这是您会得到的回复 [“5 张床”、“8 个浴室”、“11836 平方英尺↵”]