Would anyone have any idea how to make a Find and Replace thing where when you can just click next it will bring you to the next found item?
Edit:
For an Textarea. I want a Javascript code that can add a Find and Replace to Textarea. I don't wanna just use.
search()
or Replace().
At the Moment im trying this:
function allIndexes() {
var indices = new Array();
var index = 0;
var i = 0;
while(index = $('#text').val().indexOf($('#search').val(), index) > 0) {
indices[i] = index;
i++;
}
return indices;
}
But that doesn't work at all.
Would anyone have any idea how to make a Find and Replace thing where when you can just click next it will bring you to the next found item?
Edit:
For an Textarea. I want a Javascript code that can add a Find and Replace to Textarea. I don't wanna just use.
search()
or Replace().
At the Moment im trying this:
function allIndexes() {
var indices = new Array();
var index = 0;
var i = 0;
while(index = $('#text').val().indexOf($('#search').val(), index) > 0) {
indices[i] = index;
i++;
}
return indices;
}
But that doesn't work at all.
Share Improve this question edited Oct 15, 2011 at 23:03 Shawn31313 asked Oct 15, 2011 at 22:34 Shawn31313Shawn31313 6,0524 gold badges41 silver badges85 bronze badges 04 Answers
Reset to default 13I updated my earlier answer and finished the search and replace functionality based on the direction my earlier post outlined. I tested this in Chrome 14, IE8 and Firefox 3.6.
Find: will select the next instance of the searchterm.
Find/Replace: will replace the next occurrence of the search string and select the replacement
Replace All: will replace all occurences and select the piece of text that has been replaced last
Hope this is now, what you were looking for. You should definitely be able to go from here and style this or make a proper class out of this...
<script src="jquery.js" type="text/javascript"></script>
<textarea id="txtArea" style="width: 300px; height:100px">
This is a test. A test, i say. The word TEST is mentioned three times.
</textarea>
<p>
<label for="termSearch">Search</label>
<input type="text" id="termSearch" name="termSearch" value="test" /><br/>
<label for="termReplace">Replace</label>
<input type="text" id="termReplace" name="termReplace" value="solution" /><br/>
<label for="caseSensitive">Case Sensitive</label>
<input type="checkbox" name="caseSensitive" id="caseSensitive" /><br/>
<a href="#" onclick="SAR.find(); return false;" id="find">FIND</a><br/>
<a href="#" onclick="SAR.findAndReplace(); return false;" id="findAndReplace">FIND/REPLACE</a><br/>
<a href="#" onclick="SAR.replaceAll(); return false;" id="replaceAll">REPLACE ALL</a><br/>
</p>
<script type="text/javascript">
var SAR = {};
SAR.find = function(){
// collect variables
var txt = $("#txtArea").val();
var strSearchTerm = $("#termSearch").val();
var isCaseSensitive = ($("#caseSensitive").attr('checked') == 'checked') ? true : false;
// make text lowercase if search is supposed to be case insensitive
if(isCaseSensitive == false){
txt = txt.toLowerCase();
strSearchTerm = strSearchTerm.toLowerCase();
}
// find next index of searchterm, starting from current cursor position
var cursorPos = ($("#txtArea").getCursorPosEnd());
var termPos = txt.indexOf(strSearchTerm, cursorPos);
// if found, select it
if(termPos != -1){
$("#txtArea").selectRange(termPos, termPos+strSearchTerm.length);
}else{
// not found from cursor pos, so start from beginning
termPos = txt.indexOf(strSearchTerm);
if(termPos != -1){
$("#txtArea").selectRange(termPos, termPos+strSearchTerm.length);
}else{
alert("not found");
}
}
};
SAR.findAndReplace = function(){
// collect variables
var origTxt = $("#txtArea").val(); // needed for text replacement
var txt = $("#txtArea").val(); // duplicate needed for case insensitive search
var strSearchTerm = $("#termSearch").val();
var strReplaceWith = $("#termReplace").val();
var isCaseSensitive = ($("#caseSensitive").attr('checked') == 'checked') ? true : false;
var termPos;
// make text lowercase if search is supposed to be case insensitive
if(isCaseSensitive == false){
txt = txt.toLowerCase();
strSearchTerm = strSearchTerm.toLowerCase();
}
// find next index of searchterm, starting from current cursor position
var cursorPos = ($("#txtArea").getCursorPosEnd());
var termPos = txt.indexOf(strSearchTerm, cursorPos);
var newText = '';
// if found, replace it, then select it
if(termPos != -1){
newText = origTxt.substring(0, termPos) + strReplaceWith + origTxt.substring(termPos+strSearchTerm.length, origTxt.length)
$("#txtArea").val(newText);
$("#txtArea").selectRange(termPos, termPos+strReplaceWith.length);
}else{
// not found from cursor pos, so start from beginning
termPos = txt.indexOf(strSearchTerm);
if(termPos != -1){
newText = origTxt.substring(0, termPos) + strReplaceWith + origTxt.substring(termPos+strSearchTerm.length, origTxt.length)
$("#txtArea").val(newText);
$("#txtArea").selectRange(termPos, termPos+strReplaceWith.length);
}else{
alert("not found");
}
}
};
SAR.replaceAll = function(){
// collect variables
var origTxt = $("#txtArea").val(); // needed for text replacement
var txt = $("#txtArea").val(); // duplicate needed for case insensitive search
var strSearchTerm = $("#termSearch").val();
var strReplaceWith = $("#termReplace").val();
var isCaseSensitive = ($("#caseSensitive").attr('checked') == 'checked') ? true : false;
// make text lowercase if search is supposed to be case insensitive
if(isCaseSensitive == false){
txt = txt.toLowerCase();
strSearchTerm = strSearchTerm.toLowerCase();
}
// find all occurances of search string
var matches = [];
var pos = txt.indexOf(strSearchTerm);
while(pos > -1) {
matches.push(pos);
pos = txt.indexOf(strSearchTerm, pos+1);
}
for (var match in matches){
SAR.findAndReplace();
}
};
/* TWO UTILITY FUNCTIONS YOU WILL NEED */
$.fn.selectRange = function(start, end) {
return this.each(function() {
if(this.setSelectionRange) {
this.focus();
this.setSelectionRange(start, end);
} else if(this.createTextRange) {
var range = this.createTextRange();
range.collapse(true);
range.moveEnd('character', end);
range.moveStart('character', start);
range.select();
}
});
};
$.fn.getCursorPosEnd = function() {
var pos = 0;
var input = this.get(0);
// IE Support
if (document.selection) {
input.focus();
var sel = document.selection.createRange();
pos = sel.text.length;
}
// Firefox support
else if (input.selectionStart || input.selectionStart == '0')
pos = input.selectionEnd;
return pos;
};
</script>
This answer is those looking for a more complete and polished version of Jens Fischer's solution with added functionalities such as find previous, find next, find and replace using regular expression, undo and redo.
Here is the link to the GitHub project: https://github.com/AlienKevin/SmartTextarea
javascript---------------------------------
function dog(id)
{
return document.getElementById(id);
}
function find()
{
var a=dog("txtf").value;
var b=dog("ta").value;
var c="";
for(var i=0;i<b.length;i++)
{
var d=b.substr(i,a.length)
if (d.indexOf(a) > -1)
c=c +" " + (d.indexOf(a)+i);
}
if (c!="")
{
alert(c);
}
else
{
alert("not find");
}
}
function replace()
{
var a=dog("txtf").value;
var b=dog("ta").value;
var c="";
for(var i=0;i<b.length;i++)
{
var d=b.substr(i,a.length)
if (d.indexOf(a) > -1)
{
c=c + dog("txtr").value;
i=i+a.length-1;
}
else
c=c + b.charAt(i);
}
dog("ta").value=c;
}
html ------------------------------------------------
<input type="text" id="txtf" value="this" style="width:427px"/>
<input type="button" value="Find" style="width:70px" onclick="find()" /> </br>
<input type="text" id="txtr" value="it" style="width:427px"/>
<input type="button" value="Replace" style="width:70px" onclick="replace()"/> </br>
<textarea id="ta" style="width:500px;height:500px">
this is a text area for test find & replace functions this is a project for find & replace in html programing language
//there is some mistake in the scrolling so below is the correction working fine in chrome.
//Complete code
var SAR = {};
SAR.find = function () {
debugger;
var parola_cercata = $("#text_box_1").val(); // the searched word
// make text lowercase if search is supposed to be case insensitive
var txt = $('#remarks').val().toLowerCase();
parola_cercata = parola_cercata.toLowerCase();
var posi = jQuery('#remarks').getCursorPosEnd(); // take the position of the word in the text
var termPos = txt.indexOf(parola_cercata, posi);
if (termPos !== -1) {
debugger;
var target = document.getElementById("remarks");
var parola_cercata2 = $("#text_box_1").val();
// select the textarea and the word
if (target.setSelectionRange) {
if ('selectionStart' in target) {
target.selectionStart = termPos;
target.selectionEnd = termPos;
this.selectionStart = this.selectionEnd = target.value.indexOf(parola_cercata2);
target.blur();
target.focus();
target.setSelectionRange(termPos, termPos + parola_cercata.length);
}
} else {
var r = target.createTextRange();
r.collapse(true);
r.moveEnd('character', termPos + parola_cercata);
r.moveStart('character', termPos);
r.select();
}
} else {
// not found from cursor pos, so start from beginning
termPos = txt.indexOf(parola_cercata);
if (termPos !== -1) {
var target = document.getElementById("remarks");
var parola_cercata2 = $("#text_box_1").val();
// select the textarea and the word
if (target.setSelectionRange) {
if ('selectionStart' in target) {
target.selectionStart = termPos;
target.selectionEnd = termPos;
this.selectionStart = this.selectionEnd = target.value.indexOf(parola_cercata2);
target.blur();
target.focus();
target.setSelectionRange(termPos, termPos + parola_cercata.length);
}
} else {
var r = target.createTextRange();
r.collapse(true);
r.moveEnd('character', termPos + parola_cercata);
r.moveStart('character', termPos);
r.select();
}
} else {
alert("not found");
}
}
};
$.fn.getCursorPosEnd = function () {
var pos = 0;
var input = this.get(0);
// IE Support
if (document.selection) {
input.focus();
var sel = document.selection.createRange();
pos = sel.text.length;
}
// Firefox support
else if (input.selectionStart || input.selectionStart === '0')
pos = input.selectionEnd;
return pos;
};
</script>