Avatar billede jacobwjensen Nybegynder
21. marts 2001 - 18:04 Der er 22 kommentarer og
2 løsninger

JavaScript, der tilføjer ord i en tekst?

Hej,

Jeg skal lave en funktion på min hjemmeside, hvor et JavaScript skal indsætte nogle ord i en forudbestemt tekst.

ET EKSEMPEL:

Den forudbestemte tekst er:

Det sjove ved vinteren er at [] ikke griller pøller på stranden.

I [] skal ordet sættes ind, så resultatet f.eks. blev:

Det sjove ved vinteren er at bedstemor ikke griller pøller på stranden.

- hvis den besøgende havde valgt \"bedstemor\" som ord.

Jeg vil gerne have at de \"nye ord\" skal sættes ind i teksten ved hjælp af <INPUT TYPE=\"text\">-tags.

Ydermere skal det gerne være muligt for den besøgende at have flere \"indsættelsesmuligheder\" i hver tekst, f.eks.:

Vejret var [godt] og solen [skinnede], men [Jesper] aflivede en [gummislange].

Kan I følge mig? Og kender I et godt JavaScript til at løse ovenstående problem?

Mange hilsner
Jacob W. Jensen
http://mandril.dk
Avatar billede nute Nybegynder
21. marts 2001 - 19:26 #1
skal brukeren først definere et sett med ord, og når brukeren submitter sin form, så skal den ferdige teksten (med alle de nye ord) vises ?

/nute
Avatar billede jacobwjensen Nybegynder
21. marts 2001 - 19:29 #2
Ja, det var tanken.

/Jacob W. Jensen
Avatar billede nute Nybegynder
21. marts 2001 - 19:47 #3
det er faktisk en helt simpel ting...desverre så må jeg gå fra kontoret, så jeg kan ikke gjøre det akkurat nå, men måten å gjøre det på er å legge alle ord inn i en array, teksten legger du inn i en variabel med delimiters (fx #0#, #1#, #2# hvor henholdsvis ord 1, 2 og 3 skal plasseres. deretter kjører du en loop på din array og replaces første ord (som har index 0 i din array) med første ord i din tekst (som har delimiter #0#). når dette er gjort, så skriver du ut din tekst...

jeg vet ikke om du kjenner mye til Javascript, men det er ikke så vanskelig.

/nute
Avatar billede jacobwjensen Nybegynder
21. marts 2001 - 19:50 #4
Nej, jeg ved desværre ikke rigtig hvad det er du mener ... men måske vil du vende tilbage i morgen med en lidt mere udførlig beskrivelse?

På forhånd tak.

Mange hilsner
Jacob W. Jensen
jacob@mandril.dk
Avatar billede nikolajdu Nybegynder
21. marts 2001 - 19:54 #5
Altså noget i den her stil. Jeg ved godt det er med en selectbox, men deromkring ikk´?


<html>
<head>
    <title>Untitled</title>
<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">
<!--

function changeStuff(choice) {
        document.all[\'dynfield\'].innerHTML = choice;
 
}

//-->
</SCRIPT>   
   
</head>

<body>
<form>

<SELECT onChange=\"changeStuff(this.options[this.selectedIndex].value);\">
<option>
  <OPTION VALUE=\"bedstemor\">bedstemor</OPTION>
  <OPTION VALUE=\"granny\">granny</OPTION>
  <OPTION VALUE=\"skinken\">skinken</OPTION>
</SELECT>

Det sjove ved vinteren er at <div id=\"dynfield\"></div> ikke griller pøller på stranden
<br>
<input type=\"submit\" value=\"udfør\">

</form> 

</body>
</html>
Avatar billede jacobwjensen Nybegynder
21. marts 2001 - 20:09 #6
Tak, Nikolaj. Jeg har to bemærkninger:

1. <div>-tag\'en gør, at det nye ord kommer til at stå på en linie for sig. Kan dette undgås?

2. Hvad hvis man hellere vil bruge f.eks. <INPUT TYPE=\"text\" NAME=\"nytord\" VALUE=\"\" SIZE=\"10\"> , så brugerne selv kan skrive et ord?

/Jacob
Avatar billede nikolajdu Nybegynder
21. marts 2001 - 20:26 #7
Jeg må ærligt indrømme at jeg ikke har godt tjeck på det med <Div>, men det kan lade sig gøre. Hvordan???
Avatar billede nikolajdu Nybegynder
21. marts 2001 - 20:41 #8
Her er en med knapper og et textfield - det virker bare ikke helt endnu, men jeg arbejder på det.

<html>
<head>
    <title>Untitled</title>
<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">
<!--

function changeStuff(choice) {
        document.all[\'dynfield\'].innerHTML = choice;
 
}

//-->
</SCRIPT>   
</head>

<body>
<form name=\"formen\">

<input type=\"radio\" name=\"bedstemor\" value=\"bedstemor \" onclick=\"changeStuff(this.value);\">Bedstemor
<input type=\"radio\" name=\"granny\" value=\"granny \" onclick=\"changeStuff(this.value);\">Granny
<input type=\"button\" name=\"skinken\" value=\"skinken \" onclick=\"changeStuff(this.value);\">Skinken
<input type=\"text\" name=\"tekst\" value=\"Skriv Selv \">
<input type=\"submit\" value=\"Skriv Selv Knap\" onSubmit=\"changeStuff(document.formen.tekst.value);\">
</form>

<br>
<br>
Det sjove ved vinteren er at <div id=\"dynfield\"></div> ikke griller pøller på stranden

</body>
</html>
Avatar billede nikolajdu Nybegynder
21. marts 2001 - 21:16 #9
Jakoba, jeg har nulavet det om til det her på én linie, men min box virker stadig ikke.

<html>
<head>
    <title>Untitled</title>
<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">
<!--

function inText(choise) {
    teksther.innerText = choise;
}

//-->
</SCRIPT>   
</head>

<body>
<form name=\"formen\">

<input type=\"button\" name=\"bedstemor\" value=\"bedstemor \" onclick=\"inText(this.value);\">
<input type=\"button\" name=\"granny\" value=\"granny \" onclick=\"inText(this.value);\">
<input type=\"button\" name=\"skinken\" value=\"skinken \" onclick=\"inText(this.value);\">
<input type=\"text\" name=\"tekst\" value=\"Skriv Selv \">
<input type=\"submit\" value=\"Skriv Selv Knap\" onSubmit=\"inText(this.form.tekst.value);\">

</form>

<br>

<BLOCKQUOTE ID=\"quote\">
Det sjove ved vinteren er at <b id=\"teksther\"></b>ikke griller pøller på stranden
</BLOCKQUOTE>

</body>
</html>
Avatar billede nikolajdu Nybegynder
21. marts 2001 - 21:55 #10
Kommentaren til Jakoba var fordi han sagde han ville kigge forbi for at score dine point. :)
Avatar billede jakoba Nybegynder
21. marts 2001 - 23:40 #11
ikke ligefrem højlitterært, men det virker da:

http://hjem.get2net.dk/Jakob.Aggernaes/temp/exp58550.html

mvh JakobA
Avatar billede nikolajdu Nybegynder
21. marts 2001 - 23:44 #12
Woaw Jakoba - Den er sgu´ da god.
Avatar billede nikolajdu Nybegynder
21. marts 2001 - 23:46 #13
Anyway, kan du forklare mig hvorfor mit input felt ikke virker? Skal man virkelig reloade hvis man gør som jeg eller er det for Netscape´s skyld?
Avatar billede jakoba Nybegynder
22. marts 2001 - 00:06 #14
Jeg gør det ihvertfald for netscapes skyld (og så forsi jeg ikke rigtig har check på det med divs og innerHTML.

jeg vil tro du kunne lave en IE-only version hvis du sagde noget i retning af:

<script>
function indset( str ) {
  tx = \"Det sjove ved vinteren er at <b>\"+str
      +\"</b>ikke griller pøller på stranden.\";
  document.noget.innerHTML = tx;
};
</script>
<input type=\"button\" value=\"bedstemor \" onclick=\"indset(this.value);\">
<input type=\"button\" value=\"granny \" onclick=\"indset(this.value);\">
<input type=\"button\" value=\"skinken \" onclick=\"indset(this.value);\">

<p><div ID=\'noget\'>
Det sjove ved vinteren er at <b>Bent Burg</b>ikke griller pølser på stranden.
</Div>

Det kunne sandsynligvis også gøres med layers, men der er det nok snarere geeeet vi skal have fat i.
Avatar billede nikolajdu Nybegynder
22. marts 2001 - 00:11 #15
Den version jeg pastede 21/03 2001 21:16:14 virker knapperne fint, men ikke boxen. Man kan jo godt opdatere indholdet i en boxe uden at reloade. Jeg tænker på alle de dersens SMS-sender med \"antal bogstaver tilbage\".
Avatar billede nikolajdu Nybegynder
22. marts 2001 - 00:27 #16
Anyway Jakoba synes jeg du skal svare. Mit eks. virker ikke helt og dit er oven i købet Cross-browser.
Avatar billede jakoba Nybegynder
22. marts 2001 - 00:34 #17
Det er vist blot fordi du prøver at bruge submit, selvom der slet ikke skal submittes. prøv med:

<input type=\"text\" name=\"tekst\" value=\"Skriv Selv \">
<input type=\"button\" value=\"Skriv Selv Knap\" onClick=\"inText(this.form.tekst.value);\">

Jev ville mene dether er dit spørgsmål, og værd at arbejde vider på :)

mvh JakobA
Avatar billede nikolajdu Nybegynder
22. marts 2001 - 00:39 #18
Doh selvfølgelig nu virker det.

Nå, men så manlger jeg bare løsningen i Netscape 4 og 6.0. Se nu bliver rigtigtg sjovt.

ååhh... :)

ho ho.
Avatar billede nikolajdu Nybegynder
22. marts 2001 - 10:27 #19
Nå lige foreløbig den rettede version. Så må jeg kigge på Netscape løsninger senere i dag.

<html>
<head>
    <title>Untitled</title>
<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">
<!--

function inText(choise) {
    teksther.innerText = choise;
}

//-->
</SCRIPT>   
</head>

<body>
<form name=\"formen\">

<input type=\"button\" name=\"bedstemor\" value=\"bedstemor \" onclick=\"inText(this.value);\">
<input type=\"button\" name=\"granny\" value=\"granny \" onclick=\"inText(this.value);\">
<input type=\"button\" name=\"skinken\" value=\"skinken \" onclick=\"inText(this.value);\">
<input type=\"text\" name=\"tekst\" value=\"Skriv Selv \">
<input type=\"button\" value=\"Skriv Selv Knap\" onclick=\"inText(this.form.tekst.value);\">

</form>

<br>

Det sjove ved vinteren er at <b id=\"teksther\"></b>ikke griller pøller på stranden

</body>
</html>
Avatar billede nikolajdu Nybegynder
28. marts 2001 - 16:12 #20
Har kigget noget på det og må konstatere jeg er en idiot til Netscape DOM.
Avatar billede rafique Nybegynder
31. marts 2001 - 19:18 #21
Jeg vil mene at dette script er hvad du spørger efter - det fungerer således:

Du kan selv indtaste basis-sætingen eller bruge den, der er sat fra starten.

Herefter kan du bladre igennem ordene og ændre dem hver især. Du kan tilføje ekstra ord i sætningen ved at udskifte ét ord med flere, og du kan ligeledes fjerne et ord ved at udskifte det med en tom tekst-streng.

Scriptet tolker bogstaver, tal, bindestreg og apostrof som værende gyldige bestanddele af et ord; alle andre tegn vil blive betragtet som seperatorer, og man vil derfor ikke kunne ændre disse selektivt. Kombinerede tegn som fx. \"é\" og \"ü\" hører også til i denne kategori. Hvis du ønsker at bruge den slags tegn må du selv kode det ind - jeg blev efterhånden træt af at sidde med hovedet nede i ASCII-tabellen :).

Denne bunke kode burde virke i NS4, IE4/5 og NS6/Mozilla. Jeg har dog kun testet i NS4.08, IE5.01 og NS6.01.

Nå, ikke mere snik-snak:

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<HTML>
<HEAD>
<TITLE></TITLE>
<STYLE TYPE=\"text/css\">
<!--
BODY, INPUT {font: 8pt Verdana, sans-serif}
-->
</STYLE>
</HEAD>
<BODY ONLOAD=\"alterString()\">
Aktuel s&aelig;tning:&nbsp;
<SPAN ID=\"mainDisplay\"></SPAN>
<LAYER NAME=\"mainDisplay\"></LAYER><BR><BR>
<FORM NAME=\"myForm\">
<INPUT NAME=\"mainInput\" TYPE=\"text\" VALUE=\"\" SIZE=70>
<INPUT NAME=\"mainButton\" TYPE=\"button\" VALUE=\"Udskift sætning\" ONCLICK=\"alterString(this)\">
<BR><BR>
<INPUT TYPE=\"button\" VALUE=\"|<<\" ONCLICK=\"setWInputToWIndex(0)\">
<INPUT TYPE=\"button\" VALUE=\"<\" ONCLICK=\"browseWords(-1)\">&nbsp;
<INPUT NAME=\"wordInput\" TYPE=\"text\" VALUE=\"\" SIZE=30>
<INPUT TYPE=\"button\" VALUE=\">\" ONCLICK=\"browseWords(1)\">
<INPUT TYPE=\"button\" VALUE=\">>|\" ONCLICK=\"setWInputToWIndex(wordIndex.length - 1)\">
<INPUT NAME=\"wordButton\" TYPE=\"button\" VALUE=\"Udskift ord\" ONCLICK=\"alterString(this)\">
</FORM>
<SCRIPT LANGUAGE=\"javascript\" TYPE=\"text/javascript\">
<!--
var DOM = (document.getElementById); //IE5+ og NS6/Mozilla
var IE4 = (document.all && !DOM);
var NS4 = (document.layers);

var myForm      = document.forms[\"myForm\"];
var mainInput  = myForm.elements[\"mainInput\"];
var wordInput  = myForm.elements[\"wordInput\"];
var mainButton  = myForm.elements[\"mainButton\"];
var wordButton  = myForm.elements[\"wordButton\"];
var mainDisplay = (DOM) ? document.getElementById(\"mainDisplay\") :
                  (IE4) ? document.all(\"mainDisplay\") :
                  (NS4) ? document.layers[\"mainDisplay\"] : null;

var strArr      = new Array();
var wordIndex    = new Array();
var currWrdIndex = 0;

function browseWords(offset){
  var n = (currWrdIndex + offset < 0) ? 0 :
          (currWrdIndex + offset > wordIndex.length - 1) ? wordIndex.length - 1 : currWrdIndex + offset;
  setWInputToWIndex(n);
}

function checkChar(c){
  cCode = c.charCodeAt(0);
  return (cCode == 39  || cCode == 45  ||
        (cCode >= 48  && cCode <= 57) ||
        (cCode >= 65  && cCode <= 90) ||
        (cCode >= 97  && cCode <= 122)||
          cCode == 197 || cCode == 198 ||
          cCode == 216 || cCode == 229 || // returnerer \'true\' hvis tegnet er
          cCode == 230 || cCode == 248);  // et bogstav (inkl æ,ø,å) eller et tal
}

function buildArr(str){
  strArr    = new Array();
  wordIndex = new Array();
  var word = \"\";
  var i = 0, j = 0;
  for (var n = 0; n < str.length; n++){
    var ch = str.charAt(n);
    if (checkChar(ch)) word += ch;
    else {
      if (word != \"\"){
        wordIndex[j++] = i;
        strArr[i++] = word;
      }
      strArr[i++] = ch;
      word = \"\";
    }
  }
  if (word != \"\"){
    wordIndex[j] = i;
    strArr[i] = word;
  }
}

function buildStr(){
  var str = \"\";
  for (var i = 0; i < strArr.length; i++)
    str += strArr[i];
  return str;
}

function setWInputToWIndex(n){
  wordInput.value = strArr[wordIndex[currWrdIndex = n]];
}

function setMainDisplay(str){
  if (DOM || IE4) mainDisplay.innerHTML = \"<B>\" + str + \"</B>\";
  else if (NS4){
    mainDisplay.document.open();
    mainDisplay.document.write(\"<SPAN STYLE=\'font:bold 8pt Verdana,sans-serif\'>\" + str + \"</SPAN>\");
    mainDisplay.document.close();
  }
}

function alterString(button){
  if (button == mainButton){
    setMainDisplay(mainInput.value);
    buildArr(mainInput.value);
    setWInputToWIndex(0);
  } else if (button == wordButton){
    strArr[wordIndex[currWrdIndex]] = wordInput.value;
        var str = buildStr();
    setMainDisplay(str);
    buildArr(str);
    setWInputToWIndex(currWrdIndex);
  } else {
        var str = \"Det sjove ved vinteren er at bedstemor ikke griller pøller på stranden.\";
    setMainDisplay(str);
    buildArr(str);
    setWInputToWIndex(0);
  }
}
//-->
</SCRIPT>
</BODY>
</HTML>

PS: Hvis nogen behøver hjælp til at forstå min spaghetti-kode, kan nogen enten skrive det som en kommentar her på siden, eller evt. emaile mig på kdb@ofir.dk (jeg er godt nok inde ved militæret i de næste 8 månder :(((( så jeg kan kun svare i weekenderne).

PPS: Mon ikke der burde falde et par point af til den ydmyge forfatter for det her...?

PPPS: nikolajdu >> En idiot siger du? så er det da heldigt at netscape tilbyder en komplet reference over javascript inkl. alt det DOM relaterede: http://developer.netscape.com/docs/manuals/js/client/jsref/contents.htm

PPPPS: Er der nogen der kender et hack som gør at man kan klippe og klistre tekst ind i svarboksen? Det tog sat\'me lang tid at skrive hele koden forfra =)
Avatar billede rafique Nybegynder
31. marts 2001 - 19:56 #22
Doh!

Glemte lige dethersens link til en side der indeholder ovenstående kode:

http://212.242.222.71/string.htm

PS: Det er min ven Kaspers server du besøger hvis du følger linket.

PPS: Ja, jeg er meget glad for PS\'er.

PPPS: Er der nogen der kender nogle gode undskyldninger for at slippe for værnepligt i sidste øjeblik? Sidste øjeblik betyder T-minus 40 timer...=)
Avatar billede rafique Nybegynder
31. marts 2001 - 20:26 #23
nikolajdu >> Hos Netscape er DOM referencen pakket sammen med javascript referencen. Tilsammen giver de såkaldt Client-Side JavaScript. For at finde den rigtige DOM reference skal du med andre ord vide hvilke versioner af javascript de forskellige NS browsere bruger - det står alt sammen her:

http://developer.netscape.com/docs/manuals/js/core/jsref15/preface.html#1003515

Og her kan du finde en oversigt over alle javascript referencer:

http://developer.netscape.com/docs/manuals/javascript.html

Med hensyn til NS6 så bruger den javascript version 1.5, men Netscape har desværre ikke fået taget sig sammen og skrevet Client-Side JavaScript reference til den version.

Det er dog ikke noget problem. NS6 (og Mozilla)følger nemlig DOM-specifikationerne fra W3C (World Wide Web Consortium). Helt præcist følger de DOM Level 1, plus event modellen fra DOM Level 2 og keyboard events fra DOM Level 3 hvis jeg husker rigtigt...

Hvis det ikke giver nogen mening check selv W3C\'s DOM side - der er det hele forklaret:

http://www.w3.org/DOM/

PS: T-minus 39t35min...
Avatar billede nikolajdu Nybegynder
24. april 2001 - 06:04 #24
rafique - Very nice information. Nu mangler vi bare a få lukke spørgsmålet. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester