Simple javascript find and replace

后端 未结 6 1050
我在风中等你
我在风中等你 2020-12-16 03:07

is there a straightforward method for searching within a div for a specific string and replacing it with another? I cannot use .replaceWith alone because there are other ele

相关标签:
6条回答
  • 2020-12-16 03:36

    Just using html().replace() with match all results element attribute or tag name.

    I face this issue also, my solution is similar to findAndReplace() function from http://james.padolsey.com/javascript/find-and-replace-text-with-javascript/ but using regular expression to get all textNode and search in each of them.

    function epubSearch(query) {
        var d = document.getElementsByTagName("body")[0];
        var re = new RegExp(query, "gi");//pattern for keyword
        var re0 = new RegExp("[>][^><]*[><]", "gi");//pattern to get textnode
    
        d.innerHTML = d.innerHTML.replace(re0, function (text) {
            // with each textNode, looking for keyword
            return text.replace(re, "<span class=\"search-result\" style=\"background-color:red;\">$&</span>");
        });
    }
    
    0 讨论(0)
  • 2020-12-16 03:43

    What's wrong with String.replace();?

    e.g.

    $("#div").html($("#div").html().replace("search string", "replace string"));
    

    Or Exploded:

    var $divElement = $("#div");         //Find the div to perform replace on
    var divContent = $divElement.html(); //Get the div's content
    divContent = divContent.replace("search string", "replace string"); //Perform replace
    $divElement.html(divContent);        //Replace contents of div element.
    
    0 讨论(0)
  • 2020-12-16 03:53

    Try this:

    var foo = $('#foo').html();
    
    foo = foo.replace('this string', 'this other string');
    
    $('#foo').html(foo);
    

    Fiddle: http://jsfiddle.net/maniator/w9GzF/

    0 讨论(0)
  • 2020-12-16 03:54

    This one works as many times as your term appears and will not kill any of the important things that shouldn't be changed (stored in the excludes array).

    usage: findAndReplace('dog','cat', document.getElementById('content'));

    /* js find andreplace Based on http://james.padolsey.com/javascript/find-and-replace-text-with-javascript/ */
    
    function findAndReplace(searchText, replacement, searchNode) {
    if (!searchText || typeof replacement === 'undefined') {
        return;
    }
    var regex = typeof searchText === 'string' ?
                new RegExp(searchText, 'g') : searchText,
        childNodes = (searchNode || document.body).childNodes,
        cnLength = childNodes.length,
        excludes = ['html','head','style','link','meta','script','object','iframe'];
    while (cnLength--) {
        var currentNode = childNodes[cnLength];
        if (currentNode.nodeType === 1 &&
          excludes.indexOf(currentNode.nodeName.toLowerCase() + ',') === -1) {
          arguments.callee(searchText, replacement, currentNode);
        }
        if (currentNode.nodeType !== 3 || !regex.test(currentNode.data) ) {
            continue;
        }
        var parent = currentNode.parentNode,
            frag = (function(){
                var html = currentNode.data.replace(regex, replacement),
                    wrap = document.createElement('div'),
                    frag = document.createDocumentFragment();
                wrap.innerHTML = html;
                while (wrap.firstChild) {
                    frag.appendChild(wrap.firstChild);
                }
                return frag;
            })();
        parent.insertBefore(frag, currentNode);
        parent.removeChild(currentNode);
    }
    }
    
    0 讨论(0)
  • 2020-12-16 03:58

    This replaces all occurrences:

    var $foo = $('#foo'),
        fooHtml = $foo.html();
    
    $foo.html(fooHtml.replace(/this string/g, 'this other string'));
    
    0 讨论(0)
  • 2020-12-16 04:03

    Here's a jQuery plugin I just wrote that provides safeReplace for collections.

    (function($){
    
    $.fn.safeReplace = function ( find, replacement ) {
    
        return this.each(function(index, elem) {
    
            var
                queue = [elem],
                node,
                i;
    
            while (queue.length) {
    
                node = queue.shift();
    
                if (node.nodeType === 1) {
                    i = node.childNodes.length;
                    while (i--) {
                        queue[queue.length] = node.childNodes[i];
                    }
                } else if (node.nodeType === 3) {
                    node.nodeValue = node.nodeValue.replace( find, replacement );
                }
            }
    
        });
    };
    
    })(jQuery);
    

    And here's how you use it:

    $('#foo').safeReplace( /this string/g, 'something else' );
    

    I've only tested in FF 4, and only on the sample HTML input - more testing is recommended.

    Hope this helps!

    0 讨论(0)
提交回复
热议问题