user3776241
user3776241

Reputation: 543

How do I use jQuery's .each() to replace text / regex?

I have this code right here:

var tweetText = $("#tweet_text").text();
var replaced = replace(tweetText);

document.getElementById("tweet_text").innerHTML = replaced;

It gets text from a text element, and highlights the mentions and URLS to make them clickable. Here is the replace() code:

function replace(text) {
    return text.replace(/([@#])([a-z\d_]+)/ig, function(_, marker, tag) {
        if (marker === "@")
            return '<a href="?r=site/twitterprofile&q=$1">' + "@" + tag + '</a>';
        return '<a href="?r=site/hashtag&q=$2">' + "#" + tag + '</a>';
    });
}

I have a long list of divs / tweets, and when I run replace() it only applies the pattern matching function to one div. To get around this, I thought of collecting all of the #tweet_textdivs using .each(), and then applying the replace() function once it loops through.

Could somebody help me do that please?

Upvotes: 4

Views: 4136

Answers (2)

Tushar
Tushar

Reputation: 87203

You can use html() as follow.

Set the HTML contents of each element in the set of matched elements.

$('.tweetClass').html(function(index, oldHtml) {
    return replace(oldHtml);
});

Upvotes: 1

Ben Fried
Ben Fried

Reputation: 2204

$('.your-tweet-class').each(function() {
    $(this).text( replace( $(this).text() ) );
});

You can remove the spaces, I just put them in for clarity.

Upvotes: 5

Related Questions