[JS] Nie mogę przypisać fragmenty węzła DOM do zmiennej


(look997) #1
var wewRopozy = getElementsByTagName('a')[0].getElementsByClassName('stat')[0];

Nie działa, przerywa wykonywanie skryptu. Dlaczego i co zrobić żeby działało?


([alex]) #2

np z powodu że:

getElementsByTagName('a')

zwraca nie tablice zaś jeden element.


(look997) #3

Ja chcę przypisać fragment węzła DOM do późniejszego wykorzystania, traktuje to jako fragment linku:

document.getElementById('watch-related').getElementsByClassName('video-list-item')[0].wewRopozy

(etam) #4

Pudło. Właśnie, że zwraca tablicę wszystkich tagów 'a' w dokumencie. http://www.w3schools.com/jsref/met_doc_ ... agname.asp

Problem jest w tym, że metoda getElementsByClassName nie jest zaimplementowana we wszystkich przeglądarkach. Według quirksmode.org nie ma jej w internet exploderze. Może chcesz skorzystać z http://code.google.com/p/getelementsbyclassname/?


(look997) #5

Ja to używam tylko na Firefoksie, gdybym użył tego tak:

document.getElementById('watch-related').getElementsByClassName('video-list-item')[0].getElementsByTagName('a')[0].getElementsByClassName('stat')[0];

To by zadziałało!

Samo przypisanie fragmentu węzła do zmiennej przerywa wykonanie skryptu.

Nie wiem czy to ma znaczenie: używam go do Greasemonkey.


(GediMaster) #6

Chcesz pobrać co? Bo ja widzę samą sprzeczność i dlatego przerywa szukanie. W pierwszym przykładzie szuka pierwszego wystąpienia tagu A, a w nim szuka pierwszego wystąpienia klasy 'stat', więc jak nie znajduje, kończy :). W drugim przypadku jest podobnie.

Opisz dokładnie czego szukasz i pokaż w czym, czyli wklej kawałek kodu html :).


(look997) #7

To jest skrypt do YouTube (podstrona z odtwarzaczem, np.

) a jego funkcja to:

// kropki i odmiana "wyświetlenia" w proponowanych


	function kropiOdmien(ropozycji, wewRopozy){

		var ablicy = ropozycji.length;

		ablicy -= 1;

		for (nrp=0; nrp<=ablicy; nrp++) {

			var wyspodwar = ropozycji[nrp].wewRopozy.firstChild.nodeValue;


			var znakiwyspod = wyspodwar.length;

			var powys = wyspodwar.substring(14, znakiwyspod);


			wyspod.firstChild.nodeValue = kropcosto(powys, ".");


			//odmiana wyświetlenia

				wyspod.firstChild.nodeValue += hawuce(powys);

		}

	}


	var ropozycji = document.getElementById('watch-related').getElementsByClassName('video-list-item');

	var wewRopozy = getElementsByTagName('a')[0].getElementsByClassName('stat')[0];alert('/cenzura/');

	kropiOdmien(ropozycji, wewRopozy);

Te dwie części są rozdzielone, ponieważ używam tej funkcji również w innym miejscu a muszę najpierw określić liczbę klas "video-list-item".


(GediMaster) #8

W ten sposób nie możesz przypisać węzła DOM, bo skrypt już na wstępie próbuje znaleźć element :). Należałoby użyć funkcji eval(), a jeśli chcesz pobrać tylko same liczby, a resztę wycinając, to użyj replace() i wyrażenia regularnego. Poniżej masz przykład, a resztę kodu sobie sam dopiszesz :):

PS

Zmienna 'wyspod' jest undefined. Co miałeś zamiar z tym zrobić :stuck_out_tongue_winking_eye:?


(look997) #9

wyspod był kiedyś połączonym ropozycji[nrp].dalsza część adresu.