webForumDet fria alternativet

plocka ur rel

JavaScriptur Javascript

13 svar · 677 visningar · startad av Fuel

Medlem sedan okt. 20001 285 inlägg
Frågan#1

hur plockar jag ut det som står i en länks rel="" på bästa sätt ?

Medlem sedan aug. 20039 340 inlägg
#2

Leta rätt på DOM-noden och kör getAttribute("rel"); på objektet?

Medlem sedan okt. 20001 285 inlägg
#3

attribs = mmmmm.getAttribute("rel").split(" ");
attribs[2]

menar du?

Medlem sedan aug. 20039 340 inlägg
#4

Jaha, det kan finnas flera värden i samma rel-atribut. Om du vill testa efter endast ett av de kan du använda en regexp:

if(/(^|\s)nofollow($|\s)/.test(mmmmm.getAttribute("rel"))){

}
Medlem sedan juni 20014 421 inlägg
#5

IE är lite buggig vad gälelr getAttribute, därför är det, tyvärr bättre att använda:

element.rel

Medlem sedan aug. 20039 340 inlägg
#6

Kan stämma... IE har ju en ful vana att göra lite allt möjligt uppercase. Men så har faktiskt IE historiskt sett aldrig haft stöd för HTML, utan den snarlika varianten MSHTML.

Medlem sedan juni 20014 421 inlägg
#7

Jag uppdaterade min kod medan nitro postade. :)

Medlem sedan aug. 20039 340 inlägg
#8

Kollade du samtidigt upp om IE uppercaseade?

Medlem sedan juni 20014 421 inlägg
#9

Nej, jag är osäker på vilkensom IE uppercasear, antingen är det det man får ut eller så är det rel-attributet i sig. Har tyvärr inte IE på min mac. :)

Din kod kan mycket vl fungera felfritt i IE. Felet brukar komma nr man leker med setAttribute och man får för sig att sätta nånting med samma namn fast annan skiftläge.

Medlem sedan okt. 20001 285 inlägg
#10

så här långt har jag kommit .. dock vill inte funktionen do_sub köras ?

function find_sub_menus()
{
	var submenu = document.getElementsByTagName("a");

	for (i = 0;i < submenu.length;i++)
	{
		if(submenu[i].rel.indexOf("submenu") != -1)
		{
			var attrib = submenu[i].rel.split(" ");
	
			if (attrib[2] != null)
			{
				var u = attrib[2];
		
			}
			submenu[i].onclick = do_sub(u);
			submenu[i].title = submenu[i].title + " - Open submenu";
		}
	}
}
Medlem sedan aug. 20039 340 inlägg
#11

Raden submenu.onclick = do_sub(u);** är åt skogen (Om inte funktionen do_sub skapar en ny funktion och returnerar.)
Dessutom så definierar du u lokalt inuti if-satsen, vilket gör att u inte är åtkomlig utanför den.
Dessa två fel ihop gör att do_sub körs från find_sub_menus och (troligen) dessutom genererar ett fel pga att u är odefinierad.
och så är det inte null du ska leta efter, utan undefined-värden.

Jag skulle gissa på något sådant här:

Edit 2: Mitt fel. Jag glömde en viktig detalj.

function find_sub_menus()
{
	var submenu = document.getElementsByTagName("a");

	for (i = 0;i < submenu.length;i++)
	{
		if(submenu[[b][/b]i].rel.indexOf("submenu") != -1)
		{
			var attrib = submenu[[b][/b]i].rel.split(" ");
	
			if ('undefined' != [b]typeof[/b] attrib[2])
			{
				var u = attrib[2];
		
				submenu[[b][/b]i].onclick = function(){
					do_sub(u);
				}
				submenu[[b][/b]i].title = submenu[[b][/b]i].title + " - Open submenu";

			}
		}
	}
}

En annan sak här: Är du medveten om att attrib[2] pekar mot det tredje attributet i rel? Detta eftersom indexen räknas från 0. Om du bara har två attribut, t ex submenu och en kategori, så ska du byta ut tvåan mot en etta.
Sen finns det säkert ett bättre sätt att göra detta till att börja med, men det är sånt jag borde hyra ut mig själv som konsult för att fixa...

Edit: fixade till ett par saker i koden.

Medlem sedan okt. 20001 285 inlägg
#12

ja nu är inte jag nån rocky på javascript men..

do_sub får rätt värde men det blir ändå undefined när jag kör den vi denna funktion .. kör jag do_sub via en onclick länk så fungerar den

function find_sub_menus()
{
	var submenu = document.getElementsByTagName("a");

	for (i = 0;i < submenu.length;i++)
	{
		if(submenu[i].rel.indexOf("submenu") != -1)
		{
			var attrib = submenu[i].rel.split(" ");
	
			if ('undefined' != attrib[1])
			{
				submenu[i].onclick = function()
				{
					edi_submenu(attrib[1]);
				}
				
				submenu[i].title = submenu[i].title + " - Open submenu";
			}
		}
	}
}

function edi_submenu(was)
{
	var ed_loading_image = "<img src=\"images/loading.gif\" alt=\"Loading...\" />";
	var ed_output_div = document.getElementById('edi-submenu');
	var ed_query_string = "?submenu=" + was;
	var ed_ajax_request;

	ed_output_div.innerHTML = ed_loading_image + " Requesting content...";
	
	try
	{
		ed_ajax_request = new XMLHttpRequest();
	}
	catch (e)
	{
		try
		{
			ed_ajax_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				ed_ajax_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				alert("Ellol: " + e.description);
				return false;
			}
		}
	}

	ed_ajax_request.onreadystatechange = function()
	{
		try
		{
			if(ed_ajax_request.readyState == 4)
			{
				if (ed_ajax_request.status == 200)
				{
					ed_output_div.innerHTML = ed_ajax_request.responseText;
				}
			}
		}
        catch(e)
        {
            alert("Ellol: " + e.description);
        }
	}

	ed_ajax_request.open("GET", "includes/edi-submenu.php" + ed_query_string, true);
	ed_ajax_request.send(null); 
}
Medlem sedan aug. 20039 340 inlägg
#13

Oj, nu klickade jag redigera istället för citera. Men kolla mitt redigerade inlägg nu.

Medlem sedan okt. 20001 285 inlägg
#14

nope

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