2013-09-05 8 views
6

Ich arbeite innerhalb einiger sehr strenger Pack-End-Begrenzungen und habe einen Client, der unerbittlich in seiner Anfrage ist, also bin ich gezwungen etwas in .js zu tun, das ich ' eher nicht.Alle Zeichen nach dem letzten '-' in einer Zeichenkette erhalten

Wie auch immer, hier geht.

Ich habe Kundenbewertungen. Am Ende dieser Überprüfungen habe ich "- USA" oder "- Australien". Grundsätzlich habe ich am Ende jeder Review '- [location]'. Ich muss diese Zeichenfolge aus dem Review-Text ziehen und dann in einen Bereich einfügen. Ich benutze jQuery, also möchte ich dabei bleiben.

Ich habe aussortiert, wie man durch jede Prüfung läuft und es dort einfüge, wo ich es brauche, aber ich habe nicht herausgefunden, wie man diese Textkette von jeder Überprüfung bekommt und sie dann von jeder Überprüfung entfernt. Dort könnte ich wirklich Hilfe gebrauchen.

Beispieltext:

<div class="v2_review-content"> 
    <h4>These earplugs are unbelievable!</h4> 
    <p class="v2_review-text">These are the only earplugs I have ever used that completely block out annoying sounds. I use them at night due to the fact I am an extremely light sleeper and the slightest noise will wake me up. These actually stick to the ear in an airtight suction and do not come out at all until I pull them off in the morning. These are as close to the perfect earplug as you can get! - United States</p> 
    <p class="v2_review-author">Jimmy, March 06, 2013</p> 
</div> 

Ich habe auch Underscore.js zur Verfügung, wenn das hilft.

+1

Finden Sie jedes Vorkommen von '" - "' in Ihrer Zeichenfolge, erhalten Sie die letzte, alle Texte danach ist Ihr Land. entferne es aus der Zeichenkette und lege es in ein neues Element, füge es an die Absatzmarkierung an. –

+2

Also, was hast du schon versucht? Sind Sie beim Extrahieren der Zeichenfolge aus diesem HTML stecken? Oder den Ort analysieren? Beim Ändern des vorhandenen DOM? – millimoose

+3

Was hast du bisher versucht? Warum funktioniert das nicht? Was passiert stattdessen? Hilf uns, dir zu helfen. –

Antwort

13

Keine Notwendigkeit für jQuery für die eigentliche String-Manipulation - ein wenig klobig, aber leicht zu verstehen:

text = 'Something -that - has- dashes - World'; 
parts = text.split('-'); 
loc = parts.pop(); 
new_text = parts.join('-'); 

So

loc == ' World'; 
new_text == 'Something -that - has- dashes '; 

Whitespace kann getrimmt oder ignoriert werden (da es in HTML oft keine Rolle spielt).

8

Zuerst teilen Sie den Zeiger auf '-', was Ihnen eine Reihe von Strings zwischen den Strichen gibt. Dann benutze es als Stapel und öffne das letzte Element und rufe Trim auf, um diesen lästigen Whitespace zu entfernen (es sei denn du magst deinen Whitespace natürlich).

"String - Location".split('-').pop().trim(); // "Location" 

mit jQuery So wäre es

$('.v2_review-text').html().split('-').pop().trim(); // "United States" 

Oder mit Vanille JS

var text = document.getElementsByClassName('v2_review-text')[0].innerHTML; 
text.split('-').pop().trim(); // "United States" 
+0

Schöne Antwort. [Hier ist eine jsFiddle] (http://jsfiddle.net/PyZxh/), die Ihre Antwort implementiert. (Ich wollte es funktionieren sehen, und es funktioniert großartig). Fühlen Sie sich frei, Ihre Antwort zu ändern/einzuschließen. – gibberish

3

Der einfachste Weg, wahrscheinlich jQuery verwenden sein, das Element zu erhalten, und nativer JavaScript, um die bekommen string:

var fullReview = $('.v2_review-text').text(); //assumes only one review exists, adjust for your use. 
var country = fullReview.substring(fullReview.lastIndexOf(' - ') + 1); //TODO correct for -1 if ' - ' not found. 

Dies ist nur ein Beweis für das Konzept; Der Rest sollte relativ einfach zu verstehen sein. Einige Dinge zu sehen, während Sie lernen: jQuery each

+1

Sieht sicher nicht wie native JS ... – Shomz

+0

Das wird jeden Text nach dem ersten Strich abrufen, OP fragte nach dem letzten afaik. –

+0

@Shomz: wahr, eingestellt! – Chris

1
var completeText = $('.v2_review-text')[0].value; 
var country = completeText.substr(completeText.lastIndexOf('-'), completeText.lenght - 1); 
+0

Das funktionierte für mich, var completeText = $ ('. V2_review-text') [0] .value; var country = completeText.sub (completeText.lastIndexOf ('-') + 1, completeText.length); – srijishks

2

Probieren Sie etwas wie dieses

str2 = str.substring(str.lastIndexOf("-")) 
2
var val = $('.v2_review-text').text(); 
var city_array = val.split('-'); 
var city = city_array[city_array.length - 1]; 

Hoffentlich habe ich Ihnen geholfen Kumpel.

Verwandte Themen