Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Insert text before and after the selected text with jQuery

Tags:

jquery

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?

like image 240
SMUsamaShah Avatar asked Nov 06 '22 04:11

SMUsamaShah


1 Answers

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.

JS Fiddle demo

And here's a way of wrapping the needle with html (though, again, it's probably not the prettiest way):

html:

<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>

jQuery:

$('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;
    });

JS Fiddle demo.

like image 189
David Thomas Avatar answered Nov 17 '22 08:11

David Thomas