在Div Jquery的最后一个BR之前获取文字



嗨,我在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 &nbsp;|&nbsp; //AND THIS NUMBER---- >8 baths &nbsp;|&nbsp; 11836 sqft
  <br>
</div>

,这在jquery

    var baths = $(res).find('.flexmls_connect__sr_address').before('br').last().contents().filter(function() {
        return this.nodeType == 3;
    }).text();

我需要获取床和浴室,而为了清除,我是从一个非常旧的API中获得的HTML代码,我无法更改HTML,我只用jQuery或JavaScript进行值。不是必不可少的答案,欢迎所有甲基元素,我只尝试许多主题,最后一个是在最后一个标签BR之前获取文字,但是任何帮助都很好,谢谢:D

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 &nbsp;|&nbsp; 8 baths &nbsp;|&nbsp; 11836 sqft
  <br>
</div>

您必须找到文本节点内容:

在此示例中为 //NEED THIS NUMBER---- >5 beds &nbsp;|&nbsp; //AND THIS NUMBER---- >8 baths &nbsp;|&nbsp; 11836 sqft,然后删除除数字以外的所有字符和|诸如此类的char:

var textNodeContent = '//NEED THIS NUMBER---- >5 beds &nbsp;|&nbsp; //AND THIS NUMBER---- >8 baths &nbsp;|&nbsp; 11836 sqft',
stripped = textNodeContent.replace(/[^0-9|]/g, '');
// the result will be 5|8|11836

尝试一下(假设信息可在第三个" break"标签中获得。

document.getElementsByClassName('flexmls_connect__sr_address')[0].getElementsByTagName("br")[2].nextSibling.data.split("|");

这是您会得到[" 5张床"," 8浴"," 11836平方英尺"]

如果HTML遵循与示例相同的格式,则可以通过选择每个div.flexmls_connect__sr_address块的内部HTML来实现目标,并在每个<br>上使用split()。您需要的文本始终将成为该列表中的第二个项目,并且在每个&nbsp;|&nbsp;依次可以是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('&nbsp;|&nbsp;');
    // report to console
    console.log(' beds:',line[0].trim());
    console.log('baths:',line[1].trim());
    console.log(' sqft:',line[2].trim());
    console.log('----');
});

如其他地方所述,您可以使用正则表达式根据需要从line中的每个项目中获取数字。即..

var beds = line[0].replace(/D+/g, "");

希望有帮助。:)

最新更新