webForumDet fria alternativet

Javascript-frågor

11 svar · 464 visningar · startad av Frezze

FrezzeMedlem sedan apr. 2004114 inlägg
#1

Hejsan.
Nu är jag i farten igen och ska fråga om Javascript. Denna gång är det om två olika saker.

Första är att jag använder mig av en funktion som aktiveras vid klickning på länk och länken blir därmed markerad. Man kommer lätt undan från detta genom att använda onfocus="this.blur();" på länken, men det borde väl gå att lägga in direkt i Javascript-funktionen? Och isåfall, hur gör jag det? Jag är ute efter att få bort lite "onödig" kod, så ni förstår.

Nästa fråga är om en citeringsfunktion. Håller på och trixar fram och tillbaka för att få det att fungera, men det går inte riktigt som jag tänkt.
Finns några problem med koden, och det är att först och främst så när man citerar så blir det extra radbrytningar, varför vet jag inte. Nästa är att om användaren tidigare citerat en person så är detta i en div, jag vill inte få med citeringen och har därför använt mig av;
strTemp = strTemp.replace(/<div[^<]*>([^<]*?)\<\/div>/gi, '');

Och enligt mig bör den koden göra att det inte följer med vid citeringen, men det gör det i alla fall.

Går inte detta javascriptet att förbättra så skulle jag sannerligen blivit glad om ni kunde länka till ett redan fungerande citerings-skript.

Tack på förhand!

(Javascriptet är nu uppdaterat med några modifieringar jag gjort, dock hjälpte det mig inte så mycket mer än att koden blev mindre)

<script type="text/javascript" language="Javascript">
function quoteInlagg(postID, strPostWriter){
  var objLyr = document.getElementById('postText' + postID);
  var strTemp = objLyr.innerHTML;
  strTemp = strTemp.replace(/<br>/gi, '\n\r');
  strTemp = strTemp.replace(/<b>/gi, '<b>');
  strTemp = strTemp.replace(/<\/b>/gi, '<\/b>');
  strTemp = strTemp.replace(/<i>/gi, '<i>');
  strTemp = strTemp.replace(/<\/i>/gi, '<\/i>');
  strTemp = strTemp.replace(/<span[^<]*>([^<]*?)\<\/span>/gi, '$1');
  strTemp = strTemp.replace(/<div[^<]*>([^<]*?)\<\/div>/gi, '');
  strTemp = strTemp.replace(/<a href="([^"]*)" target=_blank>[^<]*<\/a>/gi, '$1');
  strTemp = strTemp.replace(/<a href="([^"]*)" target="_blank">[^<]*<\/a>/gi, '$1');
  strTemp = strTemp.replace(/&amp;/gi, '&');
  strTemp = strTemp.replace(/&lt;/gi, '<');
  strTemp = strTemp.replace(/&gt;/gi, '>');

  document.CHECK.inlagg.value = '<citat='+strPostWriter+'>' + strTemp + '</citat>';
  document.CHECK.inlagg.focus();
}
</script>
PalleMedlem sedan apr. 20003 174 inlägg
#2

1. Här är en variant:

function fLinkBlur()
{
	for (a in document.links) document.links[a].onfocus = document.links[a].blur;
}

if (document.all)
{
	document.onmousedown = fLinkBlur;
}
FrezzeMedlem sedan apr. 2004114 inlägg
#3

Palle skrev:

1. Här är en variant:

function fLinkBlur()
{
	for (a in document.links) document.links[a].onfocus = document.links[a].blur;
}

if (document.all)
{
	document.onmousedown = fLinkBlur;
}

Hrm. Ännu en sådan där "IE Only" kod, tycks de vara som. Eftersom den tycks fungera i IE, men inte i FireFox. Finns ingen "Crossbrowser" variant?

Peter SMedlem sedan dec. 20025 483 inlägg
#4

1.

function blurLinks(){
  var links = document.links,
      i     = 0,
      elm   = 0;
  while (elm = links[i++]){
    elm.onfocus = function(){ this.blur() }
  }
}

window.onload = blurLinks;

2. Återkommer (om ingen annan hinner före)

FrezzeMedlem sedan apr. 2004114 inlägg
#5

Peter_S: Tackar! Nu fungerar det utmärkt i både IE och FF!. :)

Lyckades också lösa radbrytningsproblemet i FF, så att det blir korrekt antalet radbrytningar när man citerar genom att lägga till denna kodrad;

  if(document.all)
  {
  strTemp = strTemp.replace(/<br>/gi, '\n\r');
  }
  else
  {
  strTemp = strTemp.replace(/<br>/gi, '');
  }

Dock har jag upptäckt det problem som IE tycks genrera, och det är att den gärna tycks ändra <div> till <DIV> vid citering. Det skapar lite problem, eftersom den tydligen gör likadant med länkar <A> osv. Jag vill alltså att den inte citerar och konvarterar det till versaler.
Sedan kvarstår problemet med att den inte tar bort det som ligger i DIV'en. Någon som kan?

Peter SMedlem sedan dec. 20025 483 inlägg
#6

Fråga: vad är syftet med rader som denna

strTemp = strTemp.replace(/<b>/gi, '<b>');

Sedan, i.o.m. att IE - precis som du skriver - av någon anledning gör om till versaler och dessutom även plockar bort vissa avslutande taggar (tror jag), kanske du bör överväga att använda ett serverspråk uteslutande. Något liknande det wF använder.

FrezzeMedlem sedan apr. 2004114 inlägg
#7

Peter S skrev:

Fråga: vad är syftet med rader som denna

strTemp = strTemp.replace(/<b>/gi, '<b>');

Sedan, i.o.m. att IE - precis som du skriver - av någon anledning gör om till versaler och dessutom även plockar bort vissa avslutande taggar (tror jag), kanske du bör överväga att använda ett serverspråk uteslutande. Något liknande det wF använder.

Heh, nu när du säger det så förstår jag själv inte. Men jag tror inte detta har så stor inverkan då de tycks ha löst de problem som jag har med denna koden nedan, men jag ser inte hur dock.

function quotePost(postID, postWriter, obj) 
{
	var strPost = getObj(postID).innerHTML;
	if(document.all)
	{
		strPost = strPost.replace(/<br>/gi, '\n');
	}
	else
	{
		strPost = strPost.replace(/<br>/gi, '');
	}
	strPost = strPost.replace(/<b>/gi, '');
	strPost = strPost.replace(/<\/b>/gi, '');
    strPost = strPost.replace(/<i>/gi, '');
	strPost = strPost.replace(/<\/i>/gi, '');
	strPost = strPost.replace(/<u>/gi, '');
	strPost = strPost.replace(/<\/u>/gi, '');
	strPost = strPost.replace(/<c>/gi, '');
	strPost = strPost.replace(/<\/c>/gi, '');
	strPost = strPost.replace(/<a href=\42([^<]*?)\42[^<]*\<\/a>/gi, '$1');
	strPost = strPost.replace(/<span[^<]*>([^<]*?)\<\/span>/gi, '$1');
	strPost = strPost.replace(/<div[^<]*>([^<]*?)\<\/div>/gi, '');
	strPost = strPost.replace(/<div[^<]*>([^<]*?)\<\/div>/gi, '');
	strPost = strPost.replace(/&lt;/g, '<');
	strPost = strPost.replace(/&gt;/g, '>');
	strPost = strPost.replace(/&quot;/g, '"');
	strPost = strPost.replace(/&amp;/g, '&');
	strPost = strPost.replace(/\n{2,}/gi, '\n');
	with(obj)
	{
		value = value + '<quote='+postWriter+'>'+strPost+'</quote>'
		focus();
	}
}
nitro2k01Medlem sedan aug. 20039 342 inlägg
#8

Peter S skrev:

Fråga: vad är syftet med rader som denna

strTemp = strTemp.replace(/<b>/gi, '<b>');

Sedan, i.o.m. att IE - precis som du skriver - av någon anledning gör om till versaler och dessutom även plockar bort vissa avslutande taggar (tror jag), kanske du bör överväga att använda ett serverspråk uteslutande. Något liknande det wF använder.

Du svarar nästan på din egen fråga. Eftersom i är satt som attribut så ersätter den raden <B> med <b>. Varför uttrycket är flaggat greedy förstår jag dock inte alls, eftersom det inte påverkar funktionen alls i detta fall...

FrezzeMedlem sedan apr. 2004114 inlägg
#9

nitro2k01 skrev:

Du svarar nästan på din egen fråga. Eftersom i är satt som attribut så ersätter den raden <B> med <b>. Varför uttrycket är flaggat greedy förstår jag dock inte alls, eftersom det inte påverkar funktionen alls i detta fall...

Greedy? Menar du att man inte alls behöver köra med gi eller g?

Peter SMedlem sedan dec. 20025 483 inlägg
#10

Frezze skrev:

Greedy? Menar du att man inte alls behöver köra med gi eller g?

Endast 'g' är nödvändig. Genom att skriva

strTemp = strTemp.replace(/<B>/g, '<b>');

...istället kan du utelämna 'i'.

FrezzeMedlem sedan apr. 2004114 inlägg
#11

Peter S skrev:

Endast 'g' är nödvändig. Genom att skriva

strTemp = strTemp.replace(/<B>/g, '<b>');

...istället kan du utelämna 'i'.

Hrm, ok. Ska ändra det då. Men, om vi tittar på koden som jag bifogade lite längre upp (från en annan sida) så används denna;

strPost = strPost.replace(/\n{2,}/gi, '\n');

Vad gör den?

Peter SMedlem sedan dec. 20025 483 inlägg
#12

Den ersätter alla två eller fler, på varandra följande, linefeeds med ett enda. Så '\n\n\n' blir '\n'. Mig veterligen kan inte en linefeed skrivas på både versal- och gemenform så du kan skippa 'i'-flaggan.

134 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)