2017-12-04 1 views
0

Hallo Jungs habe ich dies in htmlText vor dem letzten br in div jquery

<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> 

und dies in jquery

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

Ich brauche die Betten und Bäder zu erhalten, und für clearify nicht ist mein HTML-Code, den ich von einer sehr alten API erhalte und ich kann den HTML nicht ändern, ich neeee diese Werte mit nur jquery oder Javascript. nicht neccesary mit meiner Antwort alle methos willkommen sind nur viele Themen ich versuchen, und der letzte ist Text vor dem letzten Tag br erhalten, aber jede Hilfe ist toll, danke: D

Antwort

1

before() ist ein Dom Insertion-Methode. Kann so etwas wie die folgenden

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>

+0

Deam du hast es, vielen Dank, dass dies funktioniert xD –

+0

Benötigt eine Feinabstimmung, um sicherzustellen, dass Text existiert, bevor Sie versuchen, es zu verarbeiten – charlietfl

0

Sie müssen Textknoteninhalt finden:

In diesem Beispiel ist //NEED THIS NUMBER---- >5 beds &nbsp;|&nbsp; //AND THIS NUMBER---- >8 baths &nbsp;|&nbsp; 11836 sqft dann entfernen Sie alle Zeichen außer Ziffern und | char mit Regex wie folgt:

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 
+0

Das Problem ist in dem anderen Text, den ich für Breitengrad, longitudinale Karten und viele Zahlen habe, wie dieser Weg 1250000088122095 | 6 | 1338544 so kann ich nicht machen, weil ich nicht bestimmen kann, welche Nummer ich need:/ –

+0

Das Ergebnis wie '1250000088122095 | 6 | 1338544' kann man mit der Funktion' split' in Javascript teilen und das Endergebnis wird ein Array sein – SLDev

0

Wenn Sie HTML das gleiche Format wie in dem Beispiel folgt dann können Sie Ihr Ziel erreichen, indem die innere HTML jeden div.flexmls_connect__sr_address Block auswählen und mit split() bei jede <br>. Der Text, den Sie brauchen, wird immer die zweite letzte Element in dieser Liste sein, und dies wiederum kann wie so an jedem &nbsp;|&nbsp;split() sein ...

$('.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('----'); 
}); 

Wie elsewhere erwähnt, können Sie dann reguläre Ausdrücke verwenden können, um schnappen Sie einfach die Nummer von jedem Artikel in line nach Bedarf. I.E ..

Hoffe, dass hilft. :)

0

Versuchen Sie, diese (die Informationen unter der Annahme, nach dem 3. "break" Tag in div verfügbar ist "flexmls_connect__sr_address".

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

Hier ist die Antwort, die Sie erhalten würden [ "5 Betten", "8 baths "," 11836 sqft↵ "]