Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Задача получить родителя скрипта. (https://javascript.ru/forum/misc/52313-zadacha-poluchit-roditelya-skripta.html)

mpak 15.12.2014 11:42

Если мы работаем с одним элементом. Мы все события вешаем только на один элемент. На родителя скрипта. То все остальные нам просто не к чему. Это уже дело самого скрипта. Привязка нужна только чтобы найти один единственный родительский элемент. На мой взгляд очень просто.

Крстати нашел тот глюк о котором упоминал в начала.

Вот в таком скрипте

<div>
	<script>
		(function($, script){
			$(script).parent().on("click", "a", function(e){
				var name = $(e.currentTarget).text();
				alert(name);
			}).each(function(n, main){
				console.log("main.outerHTML:", main.outerHTML);
			});
		})(jQuery, document.scripts[document.scripts.length-1])
	</script>
	<a href="">Клик</a>
</div>


main.outerHTML почему то нет содержимого ссылки. Блок просто пустой. Это также проявляется при поиске. Элементы просто не находятся. А мне они нужны при обработке. Изменить их при загружке. Кто знает почему?

Странно. Здесь почему то выводит. Вот страница на которой пробую то же самое сделать и в ней нет содержимого. https://tiggy.ru/blockchain:test в ней нет ссылки <a href="">Клик</a> хотя она физически есть в блоке. Об этом глюке я говорил выше. Здесь можно посмотреть без шаблона то же самое https://tiggy.ru/blockchain:test/null на странице есть ссылка, а в выводе main.outerHTML ее нет.

mpak 15.12.2014 11:57

Это всетаки как то связано с загрузкой. При добавлении setTimeout все отобразилось. Хотя по логике сам jquery в обертке и должен загружаться уже после того, как все элементы прогружены. Получается, что даже с оберткой есть моменты, когда элементы прогружаются не полностью. Как в данном случае. Если загружать с интервалом или по нажатию, то все нормально. Как это можно обойти?

Как то так было бы отлично. Но опять же что то не работает.

<div>
	<script type="text/javascript" src="//code.jquery.com/jquery-latest.js"></script>
	<script>
		(function($, script){
			$(script).parent().on("click", "a", function(e){
				var name = $(e.currentTarget).text();
				alert(name);
			}).one("load", function(e){
				console.log("main.outerHTML:", $(e.currentTarget).get(0).outerHTML);
				setTimeout(function(){
					console.info("main.outerHTML setTimeout:", $(e.currentTarget).get(0).outerHTML);
				}, 100);
			});
		})(jQuery, document.scripts[document.scripts.length-1])
	</script>
	<a href="">Клик</a>
</div>


Событие }).one("DOMNodeInserted", function(e){ также не срабатывает.

Такой вариант }).one(function(e){ тоже не работает.

рони 15.12.2014 12:33

mpak,
какой load и e.currentTarget в load вы ждёте ??

рони 15.12.2014 12:34

mpak,
что хоть хочешь в коде сделать , что у тебя не работает?

рони 15.12.2014 12:38

Цитата:

Сообщение от mpak
main.outerHTML почему то нет содержимого ссылки

а с чего она должна быть если парсер в див только скрипт ещё вставил а до ссылки не добрался

mpak 15.12.2014 12:40

События click вешаются отлично. Это все заработало. Но нужно событие которое сработает после загрузки так как выше я написал что если сразу делать через each то элемент еще не прогрузился и в нем нет ничего посмотреть можно здесь https://tiggy.ru/blockchain:test/null первый вывод main.outerHTML: не содержит ничего, так как в элементе ничего нет поэтому и нужно событие, при котором прогрузится элемент и можно будет работать с его содержимым.

MallSerg 15.12.2014 13:46

Для начала тебе самому нужно разобраться в том чего же ты хочешь добиться.
т.е. на отдельном листке бумаги нарисуй небольшую схемку что и в какой последовательности загружается что в этом момент запускается и что и после чего должно запустится =)


Часовой пояс GMT +3, время: 12:19.