webForumDet fria alternativet

plocka ur rel

13 svar · 677 visningar · startad av Fuel

FuelMedlem sedan okt. 20001 325 inlägg
#1

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

nitro2k01Medlem sedan aug. 20037 630 inlägg
#2

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

FuelMedlem sedan okt. 20001 325 inlägg
#3

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

menar du?

nitro2k01Medlem sedan aug. 20037 630 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"))){

}
colioneMedlem sedan juni 20013 386 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

nitro2k01Medlem sedan aug. 20037 630 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.

colioneMedlem sedan juni 20013 386 inlägg
#7

Jag uppdaterade min kod medan nitro postade. :)

nitro2k01Medlem sedan aug. 20037 630 inlägg
#8

Kollade du samtidigt upp om IE uppercaseade?

colioneMedlem sedan juni 20013 386 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.

FuelMedlem sedan okt. 20001 325 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";
		}
	}
}
nitro2k01Medlem sedan aug. 20037 630 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.

FuelMedlem sedan okt. 20001 325 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); 
}
nitro2k01Medlem sedan aug. 20037 630 inlägg
#13

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

FuelMedlem sedan okt. 20001 325 inlägg
#14

nope

129 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
126 ms — hämta tråd, inlägg och bilagor (db)