Avatar billede gertnissen Nybegynder
05. august 2005 - 13:48 Der er 18 kommentarer og
1 løsning

Fremhæv ord på siden med f.eks. gul baggrund.

Med vedlagte javascript som jeg har fundet på nettet ifbm bookmarklets til fremhævning af links på en side.

Jeg ønsker at lave en næsten tilsvarende funktion der blot fremhæver et givet ord - how to ?

java script:
for(nIx5Bs=0;nIx5Bs<document.all.length;nIx5Bs++)
    {
    if(document.all[nIx5Bs].tagName=='A')
        {
        with(document.all[nIx5Bs].style)
            {
            if(backgroundColor=='yellow')
                {
                    void(backgroundColor=document.bgColor)
                }
            else
                {
                    void(backgroundColor='yellow')
                }
            }
        }
    }
Avatar billede per1291 Nybegynder
05. august 2005 - 14:00 #1
Du skal have fat i hvert af de ord, der skal fremhæves.
Dette <span style="background-color:yellow;">ord</span> er fremhævet.
Avatar billede gertnissen Nybegynder
06. august 2005 - 00:15 #2
Nu havde jeg håbet på en lille stump dynamisk javascript kode der læser en eksisterende side igennem element-for-element for på den måde at fremhæve det online valgte ord.

På samme måde som ovenstående javascript læser en online/client side igennem og fremhæver link's on-the-fly.

Jeg søgte ikke en statisk html løsning.

Det skal ske lokalt på clienten, på samme måde som bookmarklets.
Avatar billede olebole Juniormester
06. august 2005 - 00:30 #3
<ole>

Gert, skal det være en bookmarklet, eller ...? Hvor skal ordet/ordene komme fra?

/mvh
</bole>
Avatar billede olebole Juniormester
06. august 2005 - 00:32 #4
- og skal der tages højde for, at ordet indgår i sammensætninger - og skal det i så fald highlight'es både, når sammensætningen begynder og slutter med ordet - eller ...?
Avatar billede gertnissen Nybegynder
06. august 2005 - 02:06 #5
det skal blot være bogstaverne der fremhæves uanset sammenhængen (enkelt ord eller inden i ord). Jeg forestiller mig et input felt og en submit knap.

Bookmarklet er blot nævnt for eksemplets skyld - Helst som input felt/knap, men gerne begge dele ;-)
Avatar billede roenving Novice
06. august 2005 - 02:35 #6
-- og et tilfældigt ord kan jo også være en del af noget som ikke vises, f.eks. vil highlight af ordet 'yellow' nemt kunne give problemer, hvis det er en property på en style-attribut ...
Avatar billede gertnissen Nybegynder
06. august 2005 - 15:12 #7
roenving -> det har du natuligvis ret i, disse properties eller tags skal ikke fremhæves.

Et simpelt eksempel der ikke tager højde for dette, vil også være interessant. Kunne man evt. anvende document.all[nIx5Bs].tagName eller noget lignende til denne kontrol.
Avatar billede olebole Juniormester
06. august 2005 - 19:14 #8
Nu tænkte jeg på at lave det med textRanges - og så er attributter og andet HTML ikke et problem.
Jeg sidder i forvejen og laver en range-løsning, der af gode grunde aldrig kan komme til at køre i andet end IE, hvorfor jeg naturligvis nøjes med at bruge IE's range-model. Skal jeg lave en løsning til dig, bliver det således en ren IE-løsning (som den, du selv viser). Jeg husker ikke Moz' range-model godt nok til at arbejde med den - og jeg har ikke tid til at sætte mig ordentligt ind i den på stående hånd  :)

- er det noget, du kan bruge? Det er jo ikke ligefrem en løsning, jeg vil anbefale dig at lægge på WWW  :)
Avatar billede gertnissen Nybegynder
06. august 2005 - 22:36 #9
En løsning der kun virker med IE er helt fint - løsningen skal kun bruges på en hjemmeside der anvendes af familien (bla. bedsteforældre) som 100% bruger IE.

Det kan jo være at jeg kan lære så meget af din løsning, at jeg selv (måske) kan arbejde videre med en løsning der måske vil kunne anvendes af flere browsere.
Avatar billede olebole Juniormester
06. august 2005 - 23:06 #10
oki ... her er så et eksempel, der highlight'er indenfor et element, der hedder 'content':

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>TITLE</title>
<style type="text/css">
body, html {
    height: 100%;
    margin: 0;
    padding: 0;
}
.yellow {
    background-color: #ffff00;
}
</style>
<script type="text/JavaScript">
function highLight() {
    var rng, rng2, cont, wrd = document.getElementById("inp").value;
    cont = document.getElementById("content");
    rng = rng2 = document.body.createTextRange();
    rng.moveToElementText(cont);
   
    while (rng.findText(wrd)) {
        if (rng.offsetTop>cont.offsetTop+cont.offsetHeight) break;
        rng.pasteHTML("<span class=\"yellow\">"+rng.text+"</span>");
        rng.collapse(false);
        rng2 = rng.duplicate();
        rng.moveToElementText(cont);
        rng.setEndPoint("StartToEnd", rng2);
    }
}
</script>
</head>
<body>

<input id="inp" type="text" value="ipsum">
<button onclick="highLight()">TEST</button>

<div id="content">
    <p>
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque ullamcorper. Aliquam neque. Sed tincidunt, sapien et fermentum accumsan, augue wisi ullamcorper erat, vel varius elit orci quis turpis. Pellentesque condimentum blandit quam. Duis neque elit, elementum ut, ornare sit amet, rhoncus sit amet, velit. Integer velit wisi, lobortis et, pretium at, volutpat eget, sapien. Praesent egestas aliquet nisl. Vestibulum viverra. Sed massa eros, lacinia suscipit, tristique id, molestie imperdiet, metus. Mauris at justo. Sed vitae libero. Mauris convallis semper nunc. Phasellus ullamcorper consectetuer nisl. Praesent leo est, elementum a, elementum non, pharetra et, elit. Nam elementum, velit non fringilla tempus, erat elit ullamcorper libero, hendrerit ultrices nunc eros et nibh.
    </p>
    <p>
    Maecenas pellentesque lectus nec lectus. Donec vel magna nec ipsum sollicitudin facilisis. Vestibulum malesuada convallis orci. Mauris magna. Donec ultricies. Integer turpis mi, venenatis a, egestas a, dignissim venenatis, metus. Morbi nisl nunc, lobortis lacinia, faucibus a, congue id, leo. Morbi quis leo in sem ultricies aliquet. Etiam urna nulla, iaculis ornare, vehicula at, venenatis sit amet, tortor. Sed facilisis mollis felis. Ut libero purus, auctor sed, malesuada eu, nonummy eu, quam. Etiam a justo. Maecenas posuere laoreet pede. Sed vitae arcu. Aenean auctor fermentum augue. Suspendisse quam magna, euismod eget, lacinia id, placerat at, lorem. Phasellus dictum tristique ligula. Aenean congue lorem ac sem. Etiam iaculis nunc varius felis bibendum venenatis.
    </p>
    <p>
    Integer eleifend mauris ut orci. Maecenas condimentum purus sed magna. Etiam adipiscing, neque in scelerisque fermentum, lacus dolor tempus quam, vel vehicula augue eros ut dui. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Etiam eleifend facilisis odio. Etiam lectus purus, porttitor eget, interdum ut, laoreet vitae, felis. Phasellus malesuada gravida risus. Integer nulla. Cras nec arcu vitae sem suscipit iaculis. Etiam euismod turpis et enim. Vestibulum volutpat, turpis at dignissim facilisis, pede risus scelerisque lorem, vitae euismod lacus nisl ac dolor. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    </p>
    <p>
    Donec eleifend. Proin vel diam eget velit tempus interdum. Curabitur ante libero, condimentum sit amet, imperdiet quis, pulvinar adipiscing, dui. In molestie. Cras ut diam in sem pretium varius. Suspendisse eu pede. Duis libero wisi, mattis non, iaculis a, tincidunt eget, erat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. In hac habitasse platea dictumst.
    </p>
    <p>
    Vestibulum laoreet, augue ut egestas malesuada, ligula velit fringilla odio, egestas lacinia purus eros sed risus. Fusce erat eros, eleifend ut, dictum pharetra, sodales id, ipsum. Quisque vitae urna tincidunt magna varius tristique. Duis porta, pede a faucibus mattis, quam est rhoncus turpis, sit amet cursus magna ipsum et mauris. Mauris at velit. Morbi elit. Duis molestie ligula placerat odio. Nunc nonummy quam eget neque. Quisque neque leo, fringilla ac, vestibulum a, consectetuer at, orci. Curabitur eget velit. Nullam iaculis vehicula sapien. Proin lectus. Sed ac mauris. Phasellus vitae lorem a mi lacinia hendrerit. Phasellus congue leo vel eros. Cras lacus massa, consectetuer tincidunt, sodales a, vestibulum et, orci. Aliquam tortor. Vestibulum odio libero, porttitor eget, tincidunt sit amet, rutrum vel, tellus. Mauris consequat dolor in nunc.
    </p>
</div>

<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque ullamcorper. Aliquam neque. Sed tincidunt, sapien et fermentum accumsan, augue wisi ullamcorper erat, vel varius elit orci quis turpis. Pellentesque condimentum blandit quam. Duis neque elit, elementum ut, ornare sit amet, rhoncus sit amet, velit. Integer velit wisi, lobortis et, pretium at, volutpat eget, sapien. Praesent egestas aliquet nisl. Vestibulum viverra. Sed massa eros, lacinia suscipit, tristique id, molestie imperdiet, metus. Mauris at justo. Sed vitae libero. Mauris convallis semper nunc. Phasellus ullamcorper consectetuer nisl. Praesent leo est, elementum a, elementum non, pharetra et, elit. Nam elementum, velit non fringilla tempus, erat elit ullamcorper libero, hendrerit ultrices nunc eros et nibh.
</p>

</body>
</html>
Avatar billede thesurfer Nybegynder
07. august 2005 - 14:23 #12
En funktion lavet af en bruger (husker ikke navnet på ham):

java script:(function(){var i,j,cI=0,count,tA,tmpN,pN,rep,s=prompt('Skriv tekst der skal fremhæves:',''),dv,a=new Array(),colors=new Array('lime','yellow','aqua','red');tA=document.getElementsByTagName('span');for(i=tA.length-1;i>=0;i--){if(tA[i].className!='mozjshlightex')continue;pN=tA[i].parentNode;for(j=0;j<tA[i].childNodes.length;j++){tmpN=tA[i].childNodes[j].cloneNode(true);pN.insertBefore(tmpN,tA[i]);}pN.removeChild(tA[i]);pN.normalize();}if(s==null||s.length==0)return;while(s.indexOf('\'')!=-1){i=s.indexOf('\'');a=a.concat(s.substring(0,i).split(' '));s=s.substring(i+1);i=s.indexOf('\'');if(i==-1){i=s.length}a[a.length]=s.substring(0, i);s=s.substring(i+1)}a=a.concat(s.split(' '));dv=document.defaultView;function searchWithinNode(node,te,len,color){var pos,skip,sNode,mBit,eBit,mClone;skip=0;if(node.nodeType==3){pos=node.data.toUpperCase().indexOf(te);if(pos>=0){sNode=document.createElement('span');sNode.className='mozjshlightex';sNode.style.backgroundColor=color;sNode.style.color='black';mBit=node.splitText(pos);eBit=mBit.splitText(len);mClone=mBit.cloneNode(true);sNode.appendChild(mClone);mBit.parentNode.replaceChild(sNode,mBit);++count;skip=1;}}else if(node.nodeType==1&&node.childNodes&&node.tagName.toUpperCase()!='SCRIPT'&&node.tagName.toUpperCase()!='STYLE'&&node.tagName.toUpperCase()!='TEXTAREA'){for(var child=0;child<node.childNodes.length;++child){child=child+searchWithinNode(node.childNodes[child],te,len,color)}}return skip;}rep='Report:';for(i=0;i<a.length;i++){if(a[i]==null||a[i].length==0)continue;count=0;searchWithinNode(document.body,a[i].toUpperCase(),a[i].length,colors[cI%colors.length]);cI++;rep+='  \''+a[i]+'\' '+count+';'}window.status=rep})();

Den skal bare indsætte som et bookmark. Så klikker man på det, og en popup vil dukke op. Her skriver man ordet, og den så highlight'e ordet på siden.

/theSurfer
Avatar billede olebole Juniormester
07. august 2005 - 17:49 #13
thesurfer >> Den virker i hvertfald ikke i IE  :)
Avatar billede thesurfer Nybegynder
07. august 2005 - 21:36 #14
IE stinker.. la' vær' med at brug den :-)

/theSurfer
Avatar billede olebole Juniormester
07. august 2005 - 23:08 #15
*LooL* ... hermed taget add notam  ;D
Avatar billede gertnissen Nybegynder
14. september 2005 - 23:12 #16
Hej OleBole

Undskyld for det meget sene svar, det er en pinlig forglemmelse - Din kode er helt perfekt til formålet jvf. spørgsmålet.
Avatar billede olebole Juniormester
14. september 2005 - 23:16 #17
- points og undskyldning modtaget med tak  ;o)
Avatar billede gertnissen Nybegynder
19. februar 2006 - 15:07 #18
Faldt over denne side med tilsvarende tema -> http://www.nsftools.com/misc/SearchAndHighlight.htm

Måske andre kan bruge dette
Avatar billede thesurfer Nybegynder
19. februar 2006 - 23:33 #19
gertnissen> Det var sq godt du at lige skrev et indlæg!! :-)
Jeg havde mistet koden fra 07/08-2005 14:23:43

Den har jeg nu fået tilbage.. tak, tak :-)

Ang dit link:
Scriptet er ikke særligt godt lavet, idet det ikke fjerner den tidligere markering..
Scriptet bliver bare ved med at markerer tekst..

/theSurfer
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

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