webForumDet fria alternativet

method support detection

4 svar · 1 589 visningar · startad av standard sparty

standard spartyMedlem sedan sep. 201055 inlägg
#1

Hallå

Nu bråkar jag med hasAttribute igen! Följande:

if(window.hasAttribute){
	alert('hasAttribute stöds');
}
else{
	alert('hasAttribute stöds inte');
}

if(window.setInterval){
	alert('setInterval stöds');
}
else{
	alert('setInterval stöds inte');
}

ger:

”hasAttribute stöds inte”
”setInterval stöds”

även i de browsers som stöder hasAttribute. Jag förstår verkligen inte varför. Båda är methods och borde kunna testas på detta sätt, inte sant?

PalleMedlem sedan apr. 20002 716 inlägg
#2

Syntax är: element.hasAttribute(attName); så du måste skicka med attributet in oxå, ex.

var d = document.getElementById("div1"); 
if(d.hasAttribute("align")){ 
  d.setAttribute("align", "center"); 
}
onkelborgMedlem sedan juli 2003582 inlägg
#3

Är du säker på att objektet window stödjer den metoden? Alla objekt stödjer inte alla metoder. Om jag skapar en klass A med en metod X så förväntar jag mig inte att en instans av klass B också har metod X

nitro2k01Medlem sedan aug. 20037 630 inlägg
#4

Palle: Du missuppfattar frågan, medan onkelborg fattar vinken.

Det sparty vill göra är att kolla om metoden stöds. Och de två exemplen med hasAttribute och setInterval är vitt skilda.

window-objektet är ett speciellt objekt som symboliserar det globala scopet i fönstret. Om window.setInterval är definierat, betyder det att man kan anropa setInterval från valfri plats, så länge det inte också finns en variabel i det lokala scopet som också kalllas setInterval. Om det finns en lokal variabel med samma namn, kan man skriva window.setInterval för att uttryckligen komma åt den setInterval som finns i det globala scopet. Du kan även själv uttryckligen definiera globala variabler med window.myVar = 42;

hasAttribute å andra sidan är en metod som definierad på enskilda DOM-objekt. window är som beskrivet ovan inte ett DOM-objekt, utan en symbol för det globala scopet. Vill du testa om hasAttribute stöds, måste du plocka fram ett valfritt DOM-objekt. T ex if(document.firstChild.hasAttribute)

standard spartyMedlem sedan sep. 201055 inlägg
#5

Helt riktigt nitro2k01

setInterval blandade jag bara in för att visa varför funkar det ena men inte det andra liksom. Jag antog att det var två likvärdiga ”grejor” i javascript. Jag kan bara konstatera hur jag totalt saknar grunderna i javascript med koncept som objects, variablar(!), methods och functions etc.

Men, lite klokare blev jag i alla fall.

Genererad på 364 ms · cache AV · v20260730165559-full.f96bc7eb