webForumDet fria alternativet

Ett annorlunda sätt att söka innehåll på

JavaScript

10 svar · 825 visningar · startad av bikic

Medlem sedan juni 2006261 inlägg
Frågan#1

Hej,

jag har funderat på en sak. Jag har idag en sida som samlar vissa FAQ-frågor rakt upp och ner. Dessa kan klickas fram via en toggle som då visar svaret på frågan.

Min fundering är om man kan få in ett sökfält ovan och söka LIVE direkt på sidan man är och kanske highligtha de frågor som kanske kan hjälpa en. Förstår ni hur jag menar?

Hade varit en cool sökfunktion. Egentligen fungerar den på samma sätt som att söka direkt på sidan via webbläsarens ctrl+f-funktion - fast att den är inbakad direkt på sidan och endast kollar markerat innehåll.

Är det någon som har tips?

Medlem sedan juni 2006261 inlägg
#2

Hittade något liknande.

Får testa detta och återkomma.

http://blog.mastykarz.nl/samples/jquery/searchOnThisPage.html

Medlem sedan mars 20007 896 inlägg
#3

Kanske kan en enkel search & replace fungera för dig? Inga avancerade saker alls, och fungerar bra på en mindre textmängd.

JavaScript:

var searchInContainer = function(container, query) {
	var hitPosition = container.innerHTML.indexOf(query);
	if (hitPosition >= 0) {
		container.innerHTML = eval('container.innerHTML.replace(/(' + query + ')/gim, "<span class=hit>' + query + '</span>");');
	}
}

window.onload = function() {
	document.getElementById('search').onkeyup = function(e) {
		var container       = document.getElementById('container');
		container.innerHTML = container.innerHTML.replace(/<span class=hit>(.*?)<\/span>/g, '$2');
		if (this.value.length >= 3)
			searchInContainer(document.getElementById('container'), this.value);
	}
}

Test-fil:

<html>
<head>
<script>

var searchInContainer = function(container, query) {
	var hitPosition = container.innerHTML.indexOf(query);
	if (hitPosition >= 0) {
		container.innerHTML = eval('container.innerHTML.replace(/(' + query + ')/gim, "<span class=hit>' + query + '</span>");');
	}
}

window.onload = function() {
	document.getElementById('search').onkeyup = function(e) {
		var container       = document.getElementById('container');
		container.innerHTML = container.innerHTML.replace(/<span(.*?)>(.*?)<\/span>/g, '$2');
		if (this.value.length >= 3)
			searchInContainer(document.getElementById('container'), this.value);
	}
}
</script>
<style>
span.hit {
	color: #ff00ff;
	background-color: #000;
}
</style>
</head>
<body>

<input type="text" id="search" />

<div id="container">
	<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur accumsan nisi ac lorem scelerisque tristique ac sit amet dolor. Proin dapibus accumsan scelerisque. Aenean pretium facilisis odio non vulputate. Aenean sollicitudin ullamcorper justo sit amet venenatis. Suspendisse sodales ligula vel enim eleifend et vulputate mi sagittis. Aliquam velit ligula, volutpat in rutrum vel, faucibus posuere est. Mauris at tristique mauris. Donec convallis est porttitor nisl rhoncus vehicula. Sed lectus magna, laoreet ut semper aliquet, vulputate id neque. Maecenas molestie magna sit amet sapien posuere mattis. Nam vulputate, est vitae viverra gravida, purus lacus lacinia sem, vitae varius urna purus at nulla. Nulla tellus quam, convallis sit amet fringilla vel, semper vel erat. Pellentesque a augue tortor.</p>
	
	<p>Donec ac tempor diam. Suspendisse porta posuere elementum. Suspendisse porta dictum congue. Integer in lectus purus, a porta leo. Ut sit amet lacus justo, ac pharetra metus. Proin lobortis imperdiet purus, vitae dignissim massa commodo eu. Integer porttitor eros id ipsum lobortis porttitor. Curabitur porttitor lobortis cursus. Fusce nec orci nec nisl tincidunt auctor vel eget nunc. Sed adipiscing orci sed urna lacinia gravida. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam erat volutpat. Nullam at rutrum odio.</p>
	
	<p>Aenean nunc sapien, volutpat ut euismod in, porttitor eget libero. Donec tempus scelerisque posuere. Fusce venenatis felis a dolor gravida mollis eu id felis. Pellentesque ut viverra purus. Sed lectus dui, posuere in varius sed, mollis euismod justo. Proin hendrerit magna vel mauris dictum quis ullamcorper purus rutrum. Cras lacus dui, laoreet a consequat molestie, fringilla eget ipsum. Sed fringilla nulla nec neque feugiat ac aliquam nulla accumsan. Nunc nisl elit, molestie a euismod quis, hendrerit sed nisl. Nulla in velit sit amet magna imperdiet eleifend et eu mi. Fusce ut neque at elit fringilla bibendum. Ut laoreet massa vel purus rutrum eu mattis justo rhoncus. Suspendisse condimentum, justo id volutpat pharetra, nulla nisl vehicula arcu, ac bibendum mi arcu eget risus. Sed porttitor convallis mi, sit amet luctus massa ultrices quis.</p>
	
	<p>Donec in tempor neque. Aliquam ultrices dignissim urna ac feugiat. Nam posuere arcu ut nisi dictum sed convallis neque pulvinar. Ut nibh risus, tempus eu ornare eget, laoreet eu velit. Donec at eros augue, at accumsan orci. Maecenas mollis nulla ut felis luctus elementum. Suspendisse eu erat ac purus aliquet rhoncus. Fusce mauris velit, sodales vel fringilla sed, lacinia consectetur erat. Nunc magna justo, tristique sed placerat non, tincidunt eu enim. Nullam risus purus, fringilla non ultrices in, ultrices sit amet orci.</p>
	
	<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec pharetra volutpat libero sed aliquet. Quisque suscipit tristique urna, et vehicula nibh volutpat eu. Mauris scelerisque porttitor tincidunt. Phasellus libero mauris, auctor in vehicula at, tincidunt lacinia nisl. Nulla et dignissim metus. Maecenas in tincidunt velit. Suspendisse ornare interdum purus vel bibendum. Phasellus tortor libero, tempor non facilisis id, lacinia at odio. Aenean dapibus interdum pretium.</p>
</div>

</body>
</html>
Medlem sedan juni 2006261 inlägg
#4

Ditt exempel fungerar kanon!

I och med att jag har frågor ställda med svaret som en gömd toggle så skulle jag vilja highlighta antingen frågan eller visa svaret genom att automatiskt toggla.

Förstår du vad jag menar?

Medlem sedan juni 2006261 inlägg
#5

Måste javascriptet köras innan headtaggen?

Medlem sedan juni 2006261 inlägg
#6

Min toggle-funktion ser ut så här:

// Toggle FAQ

	$(".list-faq-container").hide(); 

	$("div.trigger").toggle(function(){
		$(this).next(".list-faq-container").show();
		$(this).addClass("active");
		}, function () {
		$(this).next(".list-faq-container").hide();
		$(this).removeClass("active");
	});

<div class="trigger"><a href="#">Kan jag programmera?</a></div>

<div class="list-faq-container">
	Nej det kan du inte ;)
</div>
Medlem sedan mars 20007 896 inlägg
#7

I och med att jag har frågor ställda med svaret som en gömd toggle så skulle jag vilja highlighta antingen frågan eller visa svaret genom att automatiskt toggla.

Förstår du vad jag menar?

Jag förstår hur du menar. Visst skulle man kunna lägga in logik för att hitta aktuell "togglare" och öppna den, men det skulle innebära ganska mycket jobb för mig så här sent på kvällen. ;-) I och med att du använder jQuery så skulle jag nog leta upp ett plugin som du kan använda dig av - typ http://lomalogue.com/jquery/quicksearch/

Måste javascriptet köras innan headtaggen?

Nej, javascript kan du köra var du vill på sidan. Däremot så behöver script som manipulerar DOM ligga på ett ställe som garanterar att hela dokumentet redan har lästs in. En del lägger sina javascript allra längst ned i dokumenten, innan </body>, men dom flesta placerar dom nog i head-taggen och då i en funktion som garanterar att sidan laddats klart - som window.onload.

Medlem sedan juni 2006261 inlägg
#8

Som sagt, jag ska kolla på det lite mer imorgon.

Det verkar som om ditt script på något sätt blockerar länkar och annat innanför containern. Som om det läggs ett stort lager ovanpå texten.

Aja, tack för hjälpen.

Medlem sedan mars 20007 896 inlägg
#9

Ja, mitt script är inte speciellt snällt av sig - det tar inte hänsyn till andra taggar t.ex. Därför kan a-taggar (bl.a.) bli brutna och sluta fungera!

Medlem sedan juni 2006261 inlägg
#10

En fråga om jQuery- och CSS-anrop

Denna funktion är inte längre intressant för mig. Kan man stänga/ta bort tråden?

Medlem sedan juni 20019 519 inlägg
#11

bikic skrev:

Denna funktion är inte längre intressant för mig. Kan man stänga/ta bort tråden?

Vi stänger inga trådar och vi plockar inte bort trådar bara för att trådskaparen inte har någon nytta av det längre, framtida användare kanske tycker detta är intressant.

279 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
152 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)