Sitenize Yeni Arama Motoru
Merhabalar arkadaşlar Biraz Aramam Sonucunda Sizlere Site İçi Arama Motoru Ama Normal Arama Motorlarından Farkı Var Bu bulundugunuz Sayfa İçerisinde Bulamadığınız Kelimeleri Arıyorsunuz Ve Arama Motoru Sizin Anında Bulup Aradığınız Kelimeyı Boyuyor Ve Görmenizi KolaylaştırıyorGenel Acıklama :
Sayfanız içerisine dinamik bir arama motoru yerleştirmenizi sağlar. Anında sayfa içerisindeki kelimeler içerisinde arama yapıp, ilgili kelimenin üstünü boyar.
Gelelim Kodlara:
Tasarım Üstü :
<script type="text/javascript">
/* This script and many more are available free online at
The JavaScript Source!! http://javascript.internet.com
Created by: Robin Winslow | http://www.robinwinslow.me.uk */
// Find and select all text in the document that matches the "value" of the element passed
// If no element if passed, it will attempt to use the value of "this"
// Only works in a browser that supports the "window.getSelection" method, as other selection methods don't support multiple selectionsz
function performMultiSearch(elem,searchElem) {
// set up variables
var searchString; // Will hold the text to search for
var theSelection; // Will hold the document's selection object
var textNodes; // Will hold all the text nodes in the document
// Set it to search the entire document if we haven't been given an element to search
if(!searchElem || typeof(searchElem) == 'undefined') searchElem = document.body;
// Get the string to search for
if(elem && elem.value) searchString = elem.value;
else if(this && this.value) searchString = this.value;
// Get all the text nodes in the document
textNodes = findTypeNodes(searchElem,3);
// Get the selection object
if(window.getSelection) theSelection = window.getSelection(); // firefox
else { // some other browser - doesn't support multiple selections at once
alert("sorry this searching method isn't supported by your browser");
return;
}
// Empty the selection
theSelection.removeAllRanges(); // We want to empty the selection regardless of whether we're selecting anything
if(searchString.length > 0) { // make sure the string isn't empty, or it'll crash.
// Search all text nodes
for(var i = 0; i < textNodes.length; i++) {
// Create a regular expression object to do the searching
var reSearch = new RegExp(searchString,'gmi'); // Set it to 'g' - global (finds all instances), 'm' - multiline (searches more than one line), 'i' - case insensitive
var stringToSearch = textNodes[i].textContent;
while(reSearch(stringToSearch)) { // While there are occurrences of the searchString
// Add the new selection range
var thisRange = document.createRange();
thisRange.setStart(textNodes[i],reSearch.lastIndex - searchString.length); // Start node and index of the selection range
thisRange.setEnd(textNodes[i],reSearch.lastIndex); // End node and index of the selection
theSelection.addRange(thisRange); // Add the node to the document's current selection
}
}
}
return;
}
// Will find and select the first instance of the value of the passed element, then when called again will moves on to the next instance
// If no element passed it will try to get the value from "this"
function performSingleSearch(elem,searchElem) {
// set up variables
var searchString; // Will hold the text to search for
var theSelection; // Will hold the document's selection object
var textNodes; // Will hold all the text nodes in the document
// Set it to search the entire document if we haven't been given an element to search
if(!searchElem || typeof(searchElem) == 'undefined') searchElem = document.body;
// Get the string to search for
if(elem && elem.value) searchString = elem.value;
else if(this && this.value) searchString = this.value;
if(searchString && searchString.length > 0) { // make sure the string isn't empty, or it'll crash.
if(window.getSelection) { // Firefox
// Get the selection
theSelection = window.getSelection();
// Get all the text nodes in the document
textNodes = findTypeNodes(searchElem,3);
// If there's already a selection, and it's the string we're searching for
var searchMatch = new RegExp(searchString,'i');
if(theSelection.rangeCount == 1 && searchMatch(theSelection.getRangeAt(0).toString())) {
var currentRange = theSelection.getRangeAt(0);
theSelection.removeAllRanges();
// Move on to the next occurrence of it by iterating through text nodes...:
for(var i = 0; i < textNodes.length; i++) {
// If this text node is before the currentRange, ignore it and carry on to the next one
if(currentRange.comparePoint(textNodes[i],0) == -1 && currentRange.startContainer != textNodes[i]) continue;
// If this text node is the same as the currentRange, find the point in the currentRange
else if((currentRange.comparePoint(textNodes[i],0) == -1 && currentRange.startContainer == textNodes[i]) || (currentRange.comparePoint(textNodes[i],0) == 0)) {
// Create a regular expression object to do the searching
var reSearch = new RegExp(searchString,'gmi'); // Set it to 'g' - global (finds all instances), 'm' - multiline (searches more than one line), 'i' - case insensitive
var stringToSearch = textNodes[i].textContent;
var newRange = null;
while(reSearch(stringToSearch)) { // While there are occurrences of the searchString
// Test if the index is after the currentRange's position
if(reSearch.lastIndex - searchString.length > currentRange.startOffset) {
// This is the new search position - empty the old selection and add the new selection range
theSelection.removeAllRanges();
newRange = document.createRange();
newRange.setStart(textNodes[i],reSearch.lastIndex - searchString.length); // Start node and index of the selection range
newRange.setEnd(textNodes[i],reSearch.lastIndex); // End node and index of the selection
theSelection.addRange(newRange); // Add the node to the document's current selection
break; // We're not interested in the other results, so break out of this while loop.
}
}
if(newRange) break; // If we found a new range, break out of this for loop, cos there's nothing more to do.
else continue; // Otherwise continue
}
// If this text node is after the current one, search to see if it has any occurrences of the searchString
else if(currentRange.comparePoint(textNodes[i],0) == 1) {
// Create a regular expression object to do the searching
var reSearch = new RegExp(searchString,'gmi'); // Set it to 'g' - global (finds all instances), 'm' - multiline (searches more than one line), 'i' - case insensitive
var stringToSearch = textNodes[i].textContent;
// If we had a find, use it
if(reSearch(stringToSearch)) {
// This is the new search position - empty the old selection and add the new selection range
theSelection.removeAllRanges();
newRange = document.createRange();
newRange.setStart(textNodes[i],reSearch.lastIndex - searchString.length); // Start node and index of the selection range
newRange.setEnd(textNodes[i],reSearch.lastIndex); // End node and index of the selection
theSelection.addRange(newRange); // Add the node to the document's current selection
break; // We're not interested in the other results, so break out of this while loop.
} else continue;
}
}
}
// If we don't already have a selection, just find the first instance
else {
// Search all text nodes
for(var i = 0; i < textNodes.length; i++) {
// Create a regular expression object to do the searching
var reSearch = new RegExp(searchString,'gmi'); // Set it to 'g' - global (finds all instances), 'm' - multiline (searches more than one line), 'i' - case insensitive
var stringToSearch = textNodes[i].textContent;
if(reSearch(stringToSearch)) { // If there are occurrences of the searchString
// This is the new search position - empty the old selection and add the new selection range
theSelection.removeAllRanges();
// Add the new selection range
var thisRange = document.createRange();
thisRange.setStart(textNodes[i],reSearch.lastIndex - searchString.length); // Start node and index of the selection range
thisRange.setEnd(textNodes[i],reSearch.lastIndex); // End node and index of the selection
theSelection.addRange(thisRange); // Add the node to the document's current selection
break; // We're done
}
}
}
}
else if(document.selection) { // Internet Explorer
theSelection = document.selection;
var currentRange = theSelection.createRange();
// Empty the current selection
theSelection.empty();
if(currentRange && currentRange.text && currentRange.text.match(eval('/'+searchString+'/i'))) {
// Move start position of range past this word
currentRange.moveStart('word');
// Move end position to end of document
currentRange.moveEnd('textEdit');
// Search again
if(currentRange.findText(searchString)) {
// Select
currentRange.select();
return true;
}
return false;
} else {
// Get a new range
var searchRange = document.body.createTextRange();
// Make it encompass the whole document
searchRange.expand('textedit');
// Find the first occurrence of the searchString
if(searchRange.findText(searchString)) {
// Select
searchRange.select();
return true;
} else {
return false;
}
}
} else alert("Sorry your browser doesn't support a supported selection object");
}
}
// Recursively find all text nodes within an element
function findTypeNodes(elem,type) {
// Remove superfluous text nodes and merge adjacent text nodes
elem.normalize();
var typeNodes = new Array();
// Search all children of this element to see which ones are the right type of node
for(var nodeI = 0; nodeI < elem.childNodes.length; nodeI++) {
if(elem.childNodes[nodeI].nodeType == type) typeNodes.push(elem.childNodes[nodeI]); // If it is a the right type of node, add it to the array
else {
// If not a the right type of node, search it in turn
typeNodes = typeNodes.concat(findTypeNodes(elem.childNodes[nodeI],type));
}
}
return typeNodes; // return the array
}
// Multiple onload function created by: Simon Willison
// http://simon.incutio.com/archive/2004/05/26/addLoadEvent
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
addLoadEvent(function() {
// Create a button
var theInput = document.getElementById('searchInput');
var theButton = document.getElementById('performSearch');
var elementToSearch = document.body; // Use getElementById('yourIDName') to only allow search for a specific id.
theButton.onclick = function() { // Set the onclick function
performSingleSearch(theInput,elementToSearch);
}
});
</script>
Arama Motorunu Nereye Ekleyecekseniz .Bu Kodu Oraya Eklıyeceksiniz...
<fieldset style="width: 240px;">
<legend>Search the page</legend>
<input type="text" id="searchInput"><button id="performSearch">search</button>
</fieldset>