独特的查找/替换系统不起作用

发布于 2024-12-10 19:19:29 字数 6827 浏览 0 评论 0原文

我正在创建一个真正的查找/替换系统,但主要功能之一不起作用。

预计会发生什么:

搜索后,找到的所有单词都会在页面上突出显示。我想要它,这样你就可以单击它,它会打开一个 Div,显示:将 {WORD HERE} 替换为 {INPUT},然后你可以点击替换,它会用输入中的文本替换该单词。

我正在使用 findAndReplace 插件,但我不想更改它。

什么不起作用:

一旦您单击该单词,该框就会打开,但我不知道如何使找到的文本替换为输入中的文本。我的一些代码采用单行格式,因为我有:

return 'Code Here';

我的 Javascript:

shortcut.add("Ctrl+F", function() {
    $('#finder').animate({
        'bottom': '-53px'
    }, 100);
});
shortcut.add("Shift+F", function() {
    $('#finder').animate({
        'bottom': '0px'
    }, 100);
});
shortcut.add("Ctrl+C", function() {
    $('#finder').animate({
        'bottom': '-150px'
    }, 100);
});

function findAndReplace(searchText, replacement, searchNode) {
    if (!searchText || typeof replacement == '') {
        $('.r').css({
            'background': 'white',
            'color': 'black'
        });
        return;
    }
    if (!searchText || typeof replacement === 'undefined') {
        alert('No Items Found');
        $('.r').css({
            'background': 'white',
            'color': 'black'
        });
        return;
    }
    var regex = typeof searchText === 'string' ? new RegExp(searchText, 'g') : searchText,
        childNodes = (searchNode || document.body).childNodes,
        cnLength = childNodes.length,
        excludes = 'html,head,style,title,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);
    }
}
$('#find').submit(function() {

    findAndReplace(document.getElementById('fText').value, function(hi) {
        var n = Math.floor(Math.random() * 9999999999);
        var o = Math.floor(Math.random() * 9999999999);
        var c = 'background:white;color:black;cursor:default;';
        var id = 'changer' + n + '';
        var onclick = "$('#replace_box" + n + "').slideDown();$('#black" + n + "').show();";
        var close = "$('#replace_box" + n + "').remove();$('#black" + n + "').remove();$('#highlight" + n + "').css({'background' : 'white', 'color':'black'});";
        var click = "$('.black').hide();$('#replace_box" + n + "').slideUp(900).delay(4000).remove();$('#highlight" + n + "').html('<span id=" + id + " style=" + c + "></span>');"
        return '<div id="black' + n + '" class="black"></div><span id="highlight' + n + '" class="r" style="background: yellow;color: black;cursor:pointer;position:relative;" onclick="' + onclick + '">' + hi + '<div id="replace_box' + n + '" class="box" style="position:absolute;top:77px;left:116px;"><div style="position:relative;"><div class="close" onclick="' + close + '">Close</div>Replace <b>' + hi + '</b> with <input id="input' + n + '" autocomplete="off"/><br><br><button id="buttons' + n + '" onclick="' + click + '">Replace!</button><div class="chat-bubble-arrow"></div><div class="chat-bubble-arrow-border"></div></div></div></span>';
    });
    return false;
});
$('#replace').submit(function() {
    findAndReplace(document.getElementById('fText').value, function() {
        var mon = $('#rText').val();
        return '<span class="highlight2" style="background: white;color: black;">' + mon + '</span>';
    });
    return false;
});

哦,我正在使用快捷方式插件使查找框显示在 CTRL+F 上(替换浏览器查找系统)

请注意,Javascript 中这是Find 的主要代码:

 $('#find').submit(function() {

        findAndReplace(document.getElementById('fText').value, function(hi){
        var n = Math.floor(Math.random() * 9999999999); 
        var o = Math.floor(Math.random() * 9999999999); 
        var c = 'background:white;color:black;cursor:default;';
        var id = 'changer'+n+'';
        var onclick = "$('#replace_box"+n+"').slideDown();$('#black"+n+"').show();";
        var close = "$('#replace_box"+n+"').remove();$('#black"+n+"').remove();$('#highlight"+n+"').css({'background' : 'white', 'color':'black'});";
        var click = "$('.black').hide();$('#replace_box"+n+"').slideUp(900).delay(4000).remove();$('#highlight"+n+"').html('<span id="+id+" style="+c+"></span>');"
        return '<div id="black'+n+'" class="black"></div><span id="highlight'+n+'" class="r" style="background: yellow;color: black;cursor:pointer;position:relative;" onclick="'+onclick+'">' + hi + '<div id="replace_box'+n+'" class="box" style="position:absolute;top:77px;left:116px;"><div style="position:relative;"><div class="close" onclick="'+close+'">Close</div>Replace <b>'+hi+'</b> with <input id="input'+n+'" autocomplete="off"/><br><br><button id="buttons'+n+'" onclick="'+click+'">Replace!</button><div class="chat-bubble-arrow"></div><div class="chat-bubble-arrow-border"></div></div></div></span>';
       });
       return false;
   });

这是我的 HTML:

<div id="finder">  
<div style="position:relative;">
<form id="find" style="padding-bottom:10px;">
  <button class="close2" id="wa" onclick="$('#finder').animate({'bottom' : '-150px'}, 100);">X</button>
  <input id="fText" placeholder="Enter Text you wanna replace here!" autocomplete="off" style="width:210px;"/>
  <button>Find!</button>
</form>
<form id="replace">
  <input id="rText" placeholder="Replace all of the found items." autocomplete="off" style="width:210px;"/>
  <button>Replace All</button>
</form>
</div>
</div>
<div class="black"></div>
<div id="show"></div><div id="test"></div>
<div id="boxes"></div>

我也有 CSS 但我不会在这里发布它。

我的例子在这里:

查找/替换

真的希望有人能够理解我的编码方式并且能够帮助。

I'm creating a really Find/Replace System but one of the main features are not working.

What's Supposed to happen:

Once you search all words found will highlight on the page. I want it so you can click it and it opens an Div saying: Replace {WORD HERE} with {INPUT} and then you can hit replace and it will replace that word with the text in the Input.

I'm using the findAndReplace Plugin and I don't want to change that.

What wont work:

Once you click on the word, the box opens, but I dont know how to make the found text replace with the one in the Input. Some of my code is in an One Line formate because I have:

return 'Code Here';

My Javascript:

shortcut.add("Ctrl+F", function() {
    $('#finder').animate({
        'bottom': '-53px'
    }, 100);
});
shortcut.add("Shift+F", function() {
    $('#finder').animate({
        'bottom': '0px'
    }, 100);
});
shortcut.add("Ctrl+C", function() {
    $('#finder').animate({
        'bottom': '-150px'
    }, 100);
});

function findAndReplace(searchText, replacement, searchNode) {
    if (!searchText || typeof replacement == '') {
        $('.r').css({
            'background': 'white',
            'color': 'black'
        });
        return;
    }
    if (!searchText || typeof replacement === 'undefined') {
        alert('No Items Found');
        $('.r').css({
            'background': 'white',
            'color': 'black'
        });
        return;
    }
    var regex = typeof searchText === 'string' ? new RegExp(searchText, 'g') : searchText,
        childNodes = (searchNode || document.body).childNodes,
        cnLength = childNodes.length,
        excludes = 'html,head,style,title,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);
    }
}
$('#find').submit(function() {

    findAndReplace(document.getElementById('fText').value, function(hi) {
        var n = Math.floor(Math.random() * 9999999999);
        var o = Math.floor(Math.random() * 9999999999);
        var c = 'background:white;color:black;cursor:default;';
        var id = 'changer' + n + '';
        var onclick = "$('#replace_box" + n + "').slideDown();$('#black" + n + "').show();";
        var close = "$('#replace_box" + n + "').remove();$('#black" + n + "').remove();$('#highlight" + n + "').css({'background' : 'white', 'color':'black'});";
        var click = "$('.black').hide();$('#replace_box" + n + "').slideUp(900).delay(4000).remove();$('#highlight" + n + "').html('<span id=" + id + " style=" + c + "></span>');"
        return '<div id="black' + n + '" class="black"></div><span id="highlight' + n + '" class="r" style="background: yellow;color: black;cursor:pointer;position:relative;" onclick="' + onclick + '">' + hi + '<div id="replace_box' + n + '" class="box" style="position:absolute;top:77px;left:116px;"><div style="position:relative;"><div class="close" onclick="' + close + '">Close</div>Replace <b>' + hi + '</b> with <input id="input' + n + '" autocomplete="off"/><br><br><button id="buttons' + n + '" onclick="' + click + '">Replace!</button><div class="chat-bubble-arrow"></div><div class="chat-bubble-arrow-border"></div></div></div></span>';
    });
    return false;
});
$('#replace').submit(function() {
    findAndReplace(document.getElementById('fText').value, function() {
        var mon = $('#rText').val();
        return '<span class="highlight2" style="background: white;color: black;">' + mon + '</span>';
    });
    return false;
});

Oh, and I'm using the Shortcut plugin to make the find Box show on CTRL+F (Replacing the Browser Find System)

Note in the Javascript this is the main code for the Find:

 $('#find').submit(function() {

        findAndReplace(document.getElementById('fText').value, function(hi){
        var n = Math.floor(Math.random() * 9999999999); 
        var o = Math.floor(Math.random() * 9999999999); 
        var c = 'background:white;color:black;cursor:default;';
        var id = 'changer'+n+'';
        var onclick = "$('#replace_box"+n+"').slideDown();$('#black"+n+"').show();";
        var close = "$('#replace_box"+n+"').remove();$('#black"+n+"').remove();$('#highlight"+n+"').css({'background' : 'white', 'color':'black'});";
        var click = "$('.black').hide();$('#replace_box"+n+"').slideUp(900).delay(4000).remove();$('#highlight"+n+"').html('<span id="+id+" style="+c+"></span>');"
        return '<div id="black'+n+'" class="black"></div><span id="highlight'+n+'" class="r" style="background: yellow;color: black;cursor:pointer;position:relative;" onclick="'+onclick+'">' + hi + '<div id="replace_box'+n+'" class="box" style="position:absolute;top:77px;left:116px;"><div style="position:relative;"><div class="close" onclick="'+close+'">Close</div>Replace <b>'+hi+'</b> with <input id="input'+n+'" autocomplete="off"/><br><br><button id="buttons'+n+'" onclick="'+click+'">Replace!</button><div class="chat-bubble-arrow"></div><div class="chat-bubble-arrow-border"></div></div></div></span>';
       });
       return false;
   });

Here is my HTML:

<div id="finder">  
<div style="position:relative;">
<form id="find" style="padding-bottom:10px;">
  <button class="close2" id="wa" onclick="$('#finder').animate({'bottom' : '-150px'}, 100);">X</button>
  <input id="fText" placeholder="Enter Text you wanna replace here!" autocomplete="off" style="width:210px;"/>
  <button>Find!</button>
</form>
<form id="replace">
  <input id="rText" placeholder="Replace all of the found items." autocomplete="off" style="width:210px;"/>
  <button>Replace All</button>
</form>
</div>
</div>
<div class="black"></div>
<div id="show"></div><div id="test"></div>
<div id="boxes"></div>

I also have CSS But I won't be posting that here.

My Example Is here:

Find/Replace

Really hope someone can understand the way I code and can help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

善良天后 2024-12-17 19:19:29

以下是单击突出显示的单词时出现的“替换”按钮的代码:

<button id="buttons7430059098" onclick="$('.black').hide();$('#replace_box7430059098').slideUp(900).delay(4000).remove();$('#highlight7430059098').html('<span id=changer7430059098 style=background:white;color:black;cursor:default;></span>');">Replace!</button>

它所做的是将突出显示的元素的内容替换为空范围。您实际上需要将用户在输入字段中输入的任何内容 ($("#input7430059098").val()) 放入该范围内。

我还会创建一个可以从按钮的单击处理程序调用的函数来进行替换,因为单击处理程序中似乎已经有很多代码,但这只是我的。

编辑:

试试这个:

var click = "$('.black').hide();$('#replace_box"+n+"').slideUp(900).delay(4000).remove(); $('#highlight"+n+"').html('' + $('#input" + n + "').val() + '');";

Here is your code for the "Replace" button that appears when you click on a highlighted word:

<button id="buttons7430059098" onclick="$('.black').hide();$('#replace_box7430059098').slideUp(900).delay(4000).remove();$('#highlight7430059098').html('<span id=changer7430059098 style=background:white;color:black;cursor:default;></span>');">Replace!</button>

What it is doing is replacing the contents of the highlighted element with an empty span. You need to actually put whatever the user typed into the input field ($("#input7430059098").val()) into that span.

I would also create a function that can be called from the click handler of the button to do the replacement, as there already seems to be a lot of code right in the click handler, but that's just me.

Edit:

Try this:

var click = "$('.black').hide();$('#replace_box"+n+"').slideUp(900).delay(4000).remove();$('#highlight"+n+"').html('<span id="+id+" style="+c+">' + $('#input" + n + "').val() + '</span>');";

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文