0

嗨,伙计们,我在 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();

我需要获得床和浴室,为了清楚起见,我的 html 代码不是我从一个非常旧的 API 获得的,我无法更改 HTML,我只需要 jquery 或 javascript 的值。我的回答不是必须的,欢迎所有方法我只尝试很多主题,最后一个是在最后一个标签 br 之前获取文本,但任何帮助都很好,谢谢:D

4

4 回答 4

1

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>

于 2017-12-04T22:04:49.283 回答
0

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

然后在此示例中//NEED THIS NUMBER---- >5 beds &nbsp;|&nbsp; //AND THIS NUMBER---- >8 baths &nbsp;|&nbsp; 11836 sqft删除除数字和 | 之外的所有字符 带有正则表达式的字符,例如:

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
于 2017-12-04T21:55:53.820 回答
0

如果您的 HTML 遵循与示例中相同的格式,那么您可以通过选择每个div.flexmls_connect__sr_address块的内部 HTML 并使用split()at each来实现您的目标<br>split()您需要的文本将始终是该列表中的倒数第二个项目,而这反过来又可以&nbsp;|&nbsp;像这样......

$('.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。IE。

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

希望有帮助。:)

于 2017-12-04T22:06:35.827 回答
0

试试这个(假设信息在 div."flexmls_connect__sr_address" 中的第三个“break”标签之后可用:

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

这是您将得到的响应 [“5 个床”、“8 个浴室”、“11836 平方英尺↵”]

于 2017-12-04T22:07:50.537 回答