Just nu i M3-nätverket
Gå till innehåll

Sökmotor till text i en DIV


Micke_skane

Rekommendera Poster

Hej,

 

Försökt få till en sökmotor som ska kolla efter sökt ord i en text som skriv ut inom en DIV-box.

Får det inte att fungera! Det är när jag ska berätta för funktionen VAR den ska söka, alltså att det är inom DIV-en(id=box_text_policy) den ska göra sökningen!

Någonsom som kan/vill hjälpa mig?

 

[log]

<form name="f1" action="" onSubmit="if(this.t1.value!=null && this.t1.value!='')findString(this.t1.value);return false">

<input type="text" name=t1 value="" size=20 class="formular_inputruta"> <input type="submit" class="knapp_submit" name=b1 value="Find">

</form>

</td>

<td width="400" height="366" align="right" rowspan="2">

<%

Dim cmd

Set cmd = CreateObject("ADODB.Command")

Set cmd.ActiveConnection = Conn

cmd.CommandText = "SELECT TOP 1 ID, texten" & vbCrLf & "FROM text_policy ORDER BY ID DESC"

Set rs = cmd.Execute

%>

<div id="box_text_policy" class="box_visa_just_nu_text">

<script language="JavaScript">

<!--

var Trange=null

 

function findString (str) {

if (parseInt(navigator.appVersion)<4) return;

var strFound;

if (navigator.appName=="Netscape") {

 

// NAVIGATOR-SPECIFIC CODE

 

strFound=self.find(str);

if (!strFound) {

strFound=self.find(str,0,1)

while (self.find(str,0,1)) continue

}

}

if (navigator.appName.indexOf("Microsoft")!=-1) {

 

// EXPLORER-SPECIFIC CODE

 

if (Trange!=null) {

Trange.collapse(false)

strFound=Trange.findText(str)

if (strFound) Trange.select()

}

if (Trange==null || strFound==0) {

Trange=self.document.createTextRange()

strFound=Trange.findText(str)

if (strFound) Trange.select()

}

}

if (!strFound) alert ("String '"+str+"' not found!")

}

//-->

</script>

Nisse

<%=Replace(Trim(rs("texten")),VbCrLf,"<br>")%><br>

</div>

<%

Conn.Close

Set Conn = Nothing

%>

</td>

[/log]

 

Koden ovan är utan mina försök till att "hitta/placera" DIV-en i scriptet!

Nisse är bara ett testord :)

 

Vore oehört Tacksam!

Micke

 

Länk till kommentar
Dela på andra webbplatser

Hej och tack för svaret!

 

Som sagt, jag är inte någon javascript-guru :) så du får gärna visa i min kod Var det skulle ersättas med:

 

document.getElementById('box_text_policy')

 

Är det bara på ETT ställe det behövs ersättas?

 

Vore verkligen Tacksam för All hjälp!

Micke

 

Länk till kommentar
Dela på andra webbplatser

Du har ju själv skrivit att du inte har placerat koden där du talar om i vilket objekt funktionen ska söka, så då finns det ju inget att ersätta?

 

Jag är inte alls säker på att detta skulle fungera, men testa att byt ut "self" mot det obj som du får av getElementById i Navigator delen och Trange i Explorer delen. Men som sagt, jag är inte säker, jag har aldrig gjort det du försöker göra i javascript.

 

Länk till kommentar
Dela på andra webbplatser

Hej Jenny,

 

Tack för svaret!

 

Jag förstod inte Riktigt Vad du menade med att byta ut Trange mot obj jag får av GetElementById('')!

 

Såhär gjorde jag:

[log]

<form name="f1" action="" onSubmit="if(this.t1.value!=null && this.t1.value!='')findString(this.t1.value);return false">

<input type="text" name=t1 value="" size=20><input type="submit" name=b1 value="Find">

</form>

 

<script language="JavaScript">

<!--

var TRange=null

 

function findString (str) {

if (parseInt(navigator.appVersion)<4) return;

var strFound;

if (navigator.appName=="Netscape") {

 

// NAVIGATOR-SPECIFIC CODE

 

strFound=box_policy.find(str);

if (!strFound) {

strFound=box_policy.find(str,0,1)

while (box_policy.find(str,0,1)) continue

}

}

if (navigator.appName.indexOf("Microsoft")!=-1) {

 

// EXPLORER-SPECIFIC CODE

 

if (TRange!=null) {

TRange.collapse(false)

strFound=TRange.findText(str)

if (strFound) TRange.select()

}

if (TRange==null || strFound==0) {

TRange=document.GetElementById('box_policy').createTextRange() Rad 40!!!

strFound=TRange.findText(str)

if (strFound) TRange.select()

}

}

if (!strFound) alert ("String '"+str+"' not found!")

}

//-->

</script>

nisse<br>

<div id="box_policy">

nisse lisse

</div>

[/log]

 

När jag körde sidan i ett Explorer-fönster händer inget, när man tryckt på knappan så hoppar/laddas sidan till och sen är sökruta tom och inget ord är markerat.

Kör jag sidan i HomeSite så säger sidan att "Objectet söder inte egenskapen eller metoden" och sen pekar den på rad 40, se koden!

 

Jag har markerat med Rött Var i koden jag har ändrat!

Detta verkar vara en svår nöt att knäcka...

 

Micke

 

Länk till kommentar
Dela på andra webbplatser

 

Först måste du ta fram referensen till objektet (din box). Deklarera en variabel.

var obj = document.getElementById("box_policy") 

(OBS att javascript är case-sensitive och skiljer på stora och små bokstäver!!!)

 

Sen skriver du obj överallt där du angivit self, för self skulle väl syfta på din box?

 

Som sagt, jag har inte använt de funktioner du försöker använda, så jag är inte helt hemma i din kod.

 

Länk till kommentar
Dela på andra webbplatser

Nääää, inte det heller fungerade :(

 

 

Den hittar inget, den bara laddar om osv...

 

Såhär gjorde jag:

[log]

<form name="f1" action=""

onSubmit="if(this.t1.value!=null && this.t1.value!='')

findString(this.t1.value);return false"

>

<input type="text" name=t1 value="" size=20>

<input type="submit" name=b1 value="Find">

</form>

 

<script language="JavaScript">

<!--

var obj = document.getElementById("box_policy")

 

var TRange=null

 

function findString (str) {

if (parseInt(navigator.appVersion)<4) return;

var strFound;

if (navigator.appName=="Netscape") {

 

// NAVIGATOR-SPECIFIC CODE

 

strFound=self.find(str);

if (!strFound) {

strFound=obj.find(str,0,1)

while (obj.find(str,0,1)) continue

}

}

if (navigator.appName.indexOf("Microsoft")!=-1) {

 

// EXPLORER-SPECIFIC CODE

 

if (TRange!=null) {

TRange.collapse(false)

strFound=TRange.findText(str)

if (strFound) TRange.select()

}

if (TRange==null || strFound==0) {

TRange=obj.document.body.createTextRange()

strFound=TRange.findText(str)

if (strFound) TRange.select()

}

}

if (!strFound) alert ("String '"+str+"' not found!")

}

//-->

</script>

nisse<br>

<div id="box_policy">

nisse lisse

</div>

[/log]

 

Ska verkligen det vara obj.document.body.createTextRange()?

Kommer inte div-boxen efter document.body i dess bestämda ordning?

 

Som sagt, detta verkar vara en uppgift som är Svår att knäcka!

Micke

 

Länk till kommentar
Dela på andra webbplatser

Hej,

 

Håller fortfarande på att försöka få till min sökmotor som ska söka inom en DIV-box!

Ingen framgång!

 

Den som kan ge mig en lösning på problemet som fungerar ska jag ge en poäng till varje dag i en vecka :)

Någon som är intresserad av en utmaning, för det känns som att det krävs ett javascript-guru för att få det att fungera?

 

Ha det!

Micke

 

Länk till kommentar
Dela på andra webbplatser

Har fixat till några små saker i ditt script och i formuläret. Nu borde det fungera:

[log]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>

<body onload="Init();">

<form name="f1" action="" >
<input type="text" name="t1" value="" size=20>
<input type="button" name=b1 value="Find" onclick="if(this.form.t1.value!=null && this.form.t1.value!='') findString(this.form.t1.value);">
</form>

<script language="JavaScript">
<!--
var tRange;
var obj;
function Init() {
obj = document.getElementById("box_policy");
TRange=null;
}

function findString (str) {
if (parseInt(navigator.appVersion)<4) return;
var strFound;
if (navigator.appName=="Netscape") {
	strFound=self.find(str);
	if (!strFound) {
		strFound=obj.find(str,0,1);
		while (obj.find(str,0,1)) continue;
	}
}
if (navigator.appName.indexOf("Microsoft")!=-1) {
	if (TRange!=null) {
		TRange.collapse(false);
		strFound=TRange.findText(str);
		if (strFound) TRange.select();
	}
	if (TRange==null || strFound==0) {
		TRange=obj.document.body.createTextRange();
		strFound=TRange.findText(str);
		if (strFound) TRange.select();
	}
}
if (!strFound) alert ("String '"+str+"' not found!");
}
//-->
</script>
nisse<br>
<div id="box_policy">
nisse lisse
</div>


</body>
</html>

[/log]

 

Länk till kommentar
Dela på andra webbplatser

Hej Du,

 

Tack för Ditt svar!

Testade det och det gav inga felmeddelanden MEN det sökte Inte enbart inom DIV-boxen.

T ex om jag sökte på nisse så markerade den även nisse som är skrivit utanför boxen. Tanken är att den Bara ska markera dem orden som överrensstämmer med det som står skrivit inom DIV-en.

 

Men det måste ju gå, eller...

 

Jag lovar att Du ska få poäng varje dag i en vecka om Du får det att fungera! :)

 

Micke

 

Länk till kommentar
Dela på andra webbplatser

Har inte fixat mozilladelen (hittar ingen dokumentation över Find i Gecko) men följande borde fixa IE-delen:

[log]

	if (navigator.appName.indexOf("Microsoft")!=-1) {
	if (TRange==null || strFound==0) {
		TRange=document.body.createTextRange();
		strFound=TRange.findText(str);
		while (strFound) { 
			if (TRange.parentElement().id=="box_policy") {
				TRange.select();
				break;
			} else {
				TRange.collapse(false);
				strFound=TRange.findText(str);
			}
		} 
	} 
}

[/log]

 

Länk till kommentar
Dela på andra webbplatser

Hej Ajuna,

 

Lade in kodsnutten först av allt efter <script language="JavaScript">

Var det där den skulle ligga?

 

Då jag testade sidan fick jag felmeddelandet i IE:

"TRange är odefinerad"

Pekar på: if (TRange==null || strFound==0)

 

Samma sak i HomeSite om jag testar det där.

 

Den markerar dock ALLA ord som överensstämmer med det valda ordet.

Även inom DIV-en :(

 

Plattformen idagsläget som ska användas är IE.

 

Har jag lagt in koden Rätt?

[log]

<form name="f1" action="" >

<input type="text" name="t1" value="" size=20>

<input type="button" name=b1 value="Find" onclick="if(this.form.t1.value!=null && this.form.t1.value!='') findString(this.form.t1.value);">

</form>

 

<script language="JavaScript">

 

if (navigator.appName.indexOf("Microsoft")!=-1) {

if (TRange==null || strFound==0) {

TRange=document.body.createTextRange();

strFound=TRange.findText(str);

while (strFound) {

if (TRange.parentElement().id=="box_policy") {

TRange.select();

break;

} else {

TRange.collapse(false);

strFound=TRange.findText(str);

}

}

}

}

 

 

 

<!--

var tRange;

var obj;

function Init() {

obj = document.getElementById("box_policy");

TRange=null;

}

 

function findString (str) {

if (parseInt(navigator.appVersion)<4) return;

var strFound;

if (navigator.appName=="Netscape") {

strFound=self.find(str);

if (!strFound) {

strFound=obj.find(str,0,1);

while (obj.find(str,0,1)) continue;

}

}

if (navigator.appName.indexOf("Microsoft")!=-1) {

if (TRange!=null) {

TRange.collapse(false);

strFound=TRange.findText(str);

if (strFound) TRange.select();

}

if (TRange==null || strFound==0) {

TRange=obj.document.body.createTextRange();

strFound=TRange.findText(str);

if (strFound) TRange.select();

}

}

if (!strFound) alert ("String '"+str+"' not found!");

}

//-->

</script>

nisse<br>

<div id="box_policy">

nisse lisse

</div>

[/log]

 

Känns som att den som kan få detta att fungera är Väldens Bästa Javascript-snubbe :)

 

Micke

 

[inlägget ändrat 2005-09-15 09:15:34 av Micke_skane]

[inlägget ändrat 2005-09-15 09:19:44 av Micke_skane]

Länk till kommentar
Dela på andra webbplatser

Nö, du har inte lagt in den rätt. Här är hela filen (med Mozilla-kod borttaget,)

[log]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>

<body onload="Init();">

<form name="f1" action="" >
<input type="text" name="t1" value="" size=20>
<input type="button" name=b1 value="Find" onclick="if(this.form.t1.value!=null && this.form.t1.value!='') findString(this.form.t1.value);">
</form>

<script language="JavaScript">
<!--
var tRange;
var obj;
var cont;
function Init() {
obj = document.getElementById("box_policy");
TRange=null;
}

function findString (str) {
if (parseInt(navigator.appVersion)<4) return;
var strFound;
if (navigator.appName.indexOf("Microsoft")!=-1) {
	if (TRange==null || strFound==0) {
		TRange=document.body.createTextRange();
		strFound=TRange.findText(str);
		while (strFound) { 
			if (TRange.parentElement().id=="box_policy") {
				TRange.select();
				break;
			} else {
				TRange.collapse(false);
				strFound=TRange.findText(str);
			}
		} 
	} 
}
if (!strFound&&!cont) alert ("String '"+str+"' not found!");
}
//-->
</script>
nisse<br>
<div style="border:1px solid blac;" id="box_policy">
nisse lisse
nisse
</div>
nisse lisse

</body>
</html>

[/log]

 

Länk till kommentar
Dela på andra webbplatser

Som sagt, jag är Inte någon direkt javascript-guru så...:)

 

Det som hände Nu är att sidan körs utan något felmeddelande MEN innan då man fick ett ord markerat kunde man klicka igen och då blev nästa ord markerat och så kunde man hålla på tills man blev 100 år.

 

Nu är det så att när man har hittat ett "nisse" så markeras det Men om man vill söka nästa ord som stämmer säger ett felmeddelade:

 

String "nisse" not found

 

Denna går in:

if (!strFound&&!cont) alert ("String '"+str+"' not found!");

 

Även om man väljer att skriva in "nisse" på nytt i sökrutan och klickar så kommer samma felmeddelande.

 

Jag måste Reloada sidan och Då söker den på nytt och hittar det man ville! Precis som om den är Låst i funktionen...Amatör-synpunkt :)

Den söker även Nu enbart inom DIV-en! :thumbsup:

Fungerar det hos Dig???

 

Jag Uppskattar Verkligen Ditt engangemang och Du är vekligen värd alla poäng som väntar vid en lösning!

 

Micke

 

[inlägget ändrat 2005-09-15 09:38:01 av Micke_skane]

Länk till kommentar
Dela på andra webbplatser

Ok, om man kommit till slutet av div:en så säger den nu att den inte hittat strängen och frågar om man vill söka från början av div:en

[log]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>

<body onload="Init();">

<form name="f1" action="" >
<input type="text" name="t1" value="" size=20>
<input type="button" name=b1 value="Find" onclick="if(this.form.t1.value!=null && this.form.t1.value!='') findString(this.form.t1.value);">
</form>

<script language="JavaScript">
<!--
var tRange;
var obj;
var cont;
var strFound;
var sStr;
function Init() {
obj = document.getElementById("box_policy");
TRange=null;
}

function findString (str) {
sStr=str;
if (parseInt(navigator.appVersion)<4) return;
if (navigator.appName.indexOf("Microsoft")!=-1) {
	if (TRange) 
		TRange.collapse(false);
	else
		TRange=document.body.createTextRange();
	strFound=TRange.findText(str);
	while (strFound) { 
		if (TRange.parentElement().id=="box_policy") {
			TRange.select();
			break;
		} else {
			TRange.collapse(false);
			strFound=TRange.findText(str);
		}
	} 
}
if (!strFound) {
	if (confirm("String '"+str+"' not found! Start from beginning of document?")) {
		ResetAndFind();
	}		
}
}
function ResetAndFind() {
TRange.collapse(false);
TRange=null;
findString(sStr);
}
//-->
</script>
nisse<br>
<div style="border:1px solid blac;" id="box_policy">
nisse lisse
nisse
</div>
nisse lisse

</body>
</html>

[/log]

 

Länk till kommentar
Dela på andra webbplatser

DU ÄR MIN HJÄLTE :thumbsup:

DU KAN NU TITULERA DIG JAVASCRIPT-GURU!

 

Det är Du värd sju poäng en vecka framåt med start IDag :)

 

Det går inte att komma ifrån att man får en popup-ruta och istället att den bara startar om från början automatiskt?

 

Micke

 

Länk till kommentar
Dela på andra webbplatser

DU ÄR MIN HJÄLTE

DU KAN NU TITULERA DIG JAVASCRIPT-GURU!

Hehe, tackar =)

 

Det går inte att komma ifrån att man får en popup-ruta och istället att den bara startar om från början automatiskt?

Ok, nu börjar den om automatiskt från början och letar

[log]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>

<body onload="Init();">

<form name="f1" action="" >
<input type="text" name="t1" value="" size=20>
<input type="button" name=b1 value="Find" onclick="if(this.form.t1.value!=null && this.form.t1.value!='') findString(this.form.t1.value);">
</form>

<script language="JavaScript">
<!--
var tRange;
var obj;
var cont;
var strFound;
var sStr;
var loops=0;
function Init() {
obj = document.getElementById("box_policy");
TRange=null;
}

function findString (str) {
sStr=str;
if (parseInt(navigator.appVersion)<4) return;
if (navigator.appName.indexOf("Microsoft")!=-1) {
	if (TRange) 
		TRange.collapse(false);
	else
		TRange=document.body.createTextRange();
	strFound=TRange.findText(str);
	while (strFound) { 
		if (TRange.parentElement().id=="box_policy") {
			TRange.select();
			break;
		} else {
			TRange.collapse(false);
			strFound=TRange.findText(str);
		}
	} 
}
if (!strFound) {
	if (loops<2)
		ResetAndFind();
	else {
		loops=0;
		alert("Hittade inte "+str);
	}
} else
	loops=0;
}
function ResetAndFind() {
loops+=1;
TRange.collapse(false);
TRange=null;
findString(sStr);
}
//-->
</script>
nisse<br>
<div style="border:1px solid blac;" id="box_policy">
nisse lisse
nisse
</div>
nisse lisse

</body>
</html>

[/log]

 

Länk till kommentar
Dela på andra webbplatser

FY F_N vad BRA!

 

Hade man kunnat dela ut en guldstjärna hade jag gjort det! :thumbsup::thumbsup::thumbsup::)

 

Jag är imponerad!

 

Ha en bra dag!

Micke

 

Länk till kommentar
Dela på andra webbplatser

Hej Du,

 

Har testat scriptet på en Asp-sida där jag skriver ut en text oc hdet fungerar såhär :thumbsup:

 

Tänkte höra med Dig om det skulle gå att begränsa sökningen enbart till hela ord, som det är nu så om man söker på "är" så markeras även här i ordet här om Det var med i texten.

 

Micke

 

[inlägget ändrat 2005-09-16 11:45:49 av Micke_skane]

[inlägget ändrat 2005-09-16 11:46:40 av Micke_skane]

Länk till kommentar
Dela på andra webbplatser

För att enbart söka på hela ord får du ändra på två ställen. Ersätt de två ställena där följande står:

 

strFound=TRange.findText(str);

mot

strFound=TRange.findText(str,99999,2);

 

(OBS! Värdet 99999 måste vara större än det antal tecken som lagret maximalt kan innehålla)

 

Länk till kommentar
Dela på andra webbplatser

:thumbsup: :thumbsup: :thumbsup:

 

Du har redan fått poäng men hade jag kunnat bjuda på en Guiness hade jag gjort det TVÅ gånger :)

 

Stort Tack!

Micke

 

Länk till kommentar
Dela på andra webbplatser

hade jag kunnat bjuda på en Guiness hade jag gjort det TVÅ

Hehe, tackar, fast jag har bytt standardölet till Hobgoblin numer (Guinnessen hade en förmåga att sätta sig i fläsket =)

 

Länk till kommentar
Dela på andra webbplatser

Så man kan få för mycket av det goda med?

Det är märkligt att mycket av det goda inte är sunt :)

 

EDIT: Har Du någon idé angående min tråd om opacity i en DIV-box?

[inlägget ändrat 2005-09-16 13:04:06 av Micke_skane]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...