Получить текст перед последним занятием в div jquery
Привет, ребята, у меня есть это в HTML
<div class="flexmls_connect__sr_address">
<div class="flexmls_connect__ld_price">$9,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
4 ответа
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">$9,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>
Попробуйте это (предполагая, что информация доступна после 3-го тега "break" в div."Flexmls_connect__sr_address":
document.getElementsByClassName('flexmls_connect__sr_address')[0].getElementsByTagName("br")[2].nextSibling.data.split("|");
Вот ответ, который вы получите ["5 спальных мест", " 8 бань", " 11836 кв. Футов"]
Вы должны найти содержимое текстового узла:
В этом примере //NEED THIS NUMBER---- >5 beds | //AND THIS NUMBER---- >8 baths | 11836 sqft
затем удалите все символы, кроме цифр и | char с регулярным выражением, таким как это:
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
Если ваш HTML соответствует тому же формату, что и в примере, вы можете достичь своей цели, выбрав внутренний HTML каждого div.flexmls_connect__sr_address
блокировать и использовать 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('----');
});
Как уже упоминалось в другом месте, вы можете использовать регулярные выражения, чтобы получить только число от каждого элемента в line
по мере необходимости. IE.
var beds = line[0].replace(/\D+/g, "");
Надеюсь, это поможет.:)