views:

169

answers:

3

I need to build a string variable using jQuery to find all the text nodes surrounded by span tags. Importantly I need to separate each segment of text with the pipe character "|".

For example take the following html:

<div id="myDiv">
<span>this</span> <span>is</span> <span>the</span> <span>text</span>
</div>

Using jQuery I need to produce the following:

var my_variable = "this|is|the|text";

So far I have the following jQuery statement but this just adds the pipe character at the end and doesn't separate each segment of text.

var my_variable = $("#myDiv").find("span").text() + '|';

Any help would be very much appreciated.

Note: To remove the last pipe character at the end of the string I was going to use:

my_new_variable = "my_variable.slice(0, -1)";
+6  A: 

You can use map() on the element of spans to get the text. Javascript arrays have a join() method that will put the pipes between them but first you need to convert your jQuery object into a Javascript array. Use $.makeArray() for this.

var my_variable = $.makeArray($("#myDiv span").map(function() {
  return $(this).text();
})).join("|");
cletus
I get the following error:TypeError: Result of expression '$("#myDiv").find("span").map(function() { return $(this).text(); }).join' [undefined] is not a function.
@hayler: yes I fixed that already. Try the updated version.
cletus
Thanks very much for the reply - very close except I get a double "|" between each text string.
@hayler: when i run it i get `this|is|the|text`. I see no double pipes.
cletus
Yup, my bad.... I had a number of empty spans... Thanks very much for the super quick response.
A: 
var strings = [];
$('#myDiv span').each(function(){
    strings.push($(this).text());
});
var my_variable = strings.join('|');
artlung
A: 

var pipeText="";

$('#myDiv span').each(function(){

pipeText+=$(this).text() + "|";

});

pipeText = pipeText.slice(0, -1)

JimB