Reputation: 7890
I want to put some specified text (where possible) before and after any selected text in an HTML document.
I think there should be a smart way to do that with jQuery. Is there anyway to insert specific text before and after selected text anywhere in the document using jQuery?
Upvotes: 5
Views: 1907
Reputation: 253318
Well, here's one way to do it (though I suspect there are more concise, efficient and, honestly, better ways of doing it):
var needle = 'ipsum';
var wrappingText = ' wrapper ';
$('p').each(
function(){
var haystack = $(this).text();
$(this).text(haystack.replace(needle, wrappingText + needle + wrappingText));
});
This, obviously, relies upon the text being contained within a p
element, but that's easily amended to any other particular element, or class of element.
And here's a way of wrapping the needle
with html (though, again, it's probably not the prettiest way):
<form action="" method="post">
<fieldset>
<label for="needle">Search for this text: </label>
<input type="text" name="needle" id="needle" placeholder="Example: 'sit'" />
</fieldset>
<fieldset>
<label for="wrapper">Wrap with this:</label>
<input id="wrapper" name="wrapper" type="text" placeholder="Example: <em>" />
</fieldset>
<fieldset id="choose">
<input type="radio" name="wrapWith" id="text" value="0" checked /><label for="html">Text</label>
<input type="radio" name="wrapWith" id="html" value="1" /><label for="html">HTML</label>
</fieldset>
<fieldset>
<input type="submit" value="search" />
</fieldset>
</form>
<p>Lorem ipsum dolor sit amet.</p>
<p>Lorem ipsum dolor sit amet.</p>
$('form').submit(
function(){
var needle, wrapper, haystack;
if ($('#needle').val().length >= 1) {
needle = $('#needle').val();
}
else {
needle = 'ipsum';
}
if ($('#wrapper').val().length >= 1) {
wrapper = $('#wrapper').val();
}
else {
wrapper = 'wrap';
}
var wrappingText = 'wrapper';
$('p').each(
function(){
if ($('#text').is(':checked')) {
haystack = $(this).text();
$(this).text(haystack.replace(needle, wrapper + needle + wrapper));
}
else if ($('#html').is(':checked')) {
haystack = $(this).text();
$(this).html(haystack.replace(needle, wrapper + needle + wrapper.replace('<', '</')));
}
});
return false;
});
Upvotes: 2