I'm trying to detect a character in a text, and if found wrap the word before it in a HTML element, and remove that character.
Example:
Case:
becomes
<span class="th">Case</span>
Method
I can detect the presence of : using:
if (str.indexOf(':') > -1)
To get the word before I'm using:
var th = str.split(':')[0];
To wrap the word in an element I tried:
var th_wrap = "<span class='th'></span>";  
$(th).wrap(th_wrap);
Which doesn't work. 
To remove the : I tried:
th.replace(':', '');
Which also doesn't work.
To make it slightly more complicated, I want to catch any occurance of someword:, not just the first one. 
I'd appreciate any pointers, cheers. (javascript or jQuery)
SNIPPET
var str = $('.target').html();
if (str.indexOf(':') > -1) {
  var th = str.split(':')[0];
  th.replace(':', '');
  var th_wrap = "<span class='th'></span>";
  $(th).wrap(th_wrap);
}
th { font-weight: bold; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="target">
  Case 1:
  <br />some text
  <br />some more text
  <br />even more text
  <br />
  <br />Case 2:
  <br />some text
  <br />some more text
  <br />even more text
</p>
In your case the words Case 1: and Case 2: are text nodes.
So, you need to get all nodes under target: for this, use jQuery.contents().
The snippet:
$('.target').contents().each(function(idx, ele) {
  if (ele.nodeType == Node.TEXT_NODE &&
            ele.textContent.indexOf(':') > -1) {
    ele.textContent = ele.textContent.replace(':', '');
    $(ele).wrap($('<span/>', {
      class: 'th'
    }));
  }
});
.th {
  font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="target">
    Case 1:
    <br />some text
    <br />some more text
    <br />even more text
    <br />
    <br />Case 2:
    <br />some text
    <br />some more text
    <br />even more text
</p>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With