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

mpak 13.12.2014 05:38

Задача получить родителя скрипта.
 
Есть необходимость привязать методы к элементу в котором расположен скрипт. Некоторое время уже пытался такое написать но скрипт все еще не работает. Сложности тут вот какие. Так как jQuery начинает работать после полной загрузке всего в нутри его не получится выбрать номер нашего текущего скрипта. Это нужно делать в яваскрипте на этапе загрузки. Но потом как то полученный параметр нужно передать в сам жквери. Можно было бы использовать для этого какой то из общедоступных элементов, но какой опять же проблема. Думаю как то так делать.

<div> <!-- К этому элементу нужно прикрепить все мои события -->
	<script>
		$(function(){
			$("body").data("script").parent().on("click", "a", function(){
				alert("Клик");
			});
		}).find("body").data("script", $(document.scripts[document.scripts.length-1]))
	</script>
	<a>Нажимаем</a>
</div>

Если скрипт один такой на странице, все нормально. Но как только их больше одного, скрипты начинают друг другу мешать. Возможно как то еще удасться передать номер текущего скрипта в jQuery?.

Я думал как то так сделать но у меня такая схема не заработала, может кто подскажет что делаю не правильно. Это был бы наверно идеальный вариант. Но заработать у меня ему не удалось. Что поменять сам плохо представляю.

<div> <!-- К этому элементу нужно прикрепить все мои события -->
	<script>
		(function($, script){
			$(script).parent().on("click", "a", function(){
				alert("Клик");
			});
		})(jQuery, document.scripts[document.scripts.length-1])
	</script>
</div>

jsnb 13.12.2014 10:15

Месье знает толк... Последний код рабочий, но в диве нет тега "a".

mpak 13.12.2014 18:32

Цитата:

Сообщение от jsnb (Сообщение 346276)
Месье знает толк... Последний код рабочий, но в диве нет тега "a".

Последний код я не смог запустить Проверьте правильно он работает но не верно. Я так понимаю в нем всетаки что то не так.

mpak 13.12.2014 18:42

Цитата:

Сообщение от jsnb (Сообщение 346276)
Месье знает толк... Последний код рабочий, но в диве нет тега "a".

Проверил действительно все работает. В прошлый раз скрипт такой ловил какие то глюки от которых не получалось избавится. Сейчас вроде все нормально. Спасибо подсказали.

Для себя удобство подобной схемы обьясняю так. Мы рабоатет с элементами. Их вложенность постоянно учитывается в DOM дереве элементов. Так чем скрипт отличается от остальных? Плюс сама практика вешать события не на каждый элемент по отдельности а одно событие на родительский элемент также становится хорошей практикой. Так почему бы не иметь возможность просто закинуть скрипт в нужный элемент. Все события сами повиснут на тег в который мы закинули скрипт. Перевесить все события на элемент выше или ниже становится делом секунд. Никакие идентификаторы в скрипте кроме место его расположения не используется. Очень удобно.

bes 14.12.2014 00:32

Цитата:

Сообщение от mpak
Для себя удобство подобной схемы обьясняю так. Мы рабоатет с элементами. Их вложенность постоянно учитывается в DOM дереве элементов. Так чем скрипт отличается от остальных? Плюс сама практика вешать события не на каждый элемент по отдельности а одно событие на родительский элемент также становится хорошей практикой. Так почему бы не иметь возможность просто закинуть скрипт в нужный элемент. Все события сами повиснут на тег в который мы закинули скрипт. Перевесить все события на элемент выше или ниже становится делом секунд. Никакие идентификаторы в скрипте кроме место его расположения не используется. Очень удобно.

делегирование событий не становится, а давно практикуется ;)
всё это сомнительно хорошо, пока не начнёшь модернизировать html ;)
и ладно, если ты сам, а не для тебя :D

рони 14.12.2014 02:50

:write:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div> <!-- К этому элементу нужно прикрепить все мои события -->
	<script>
			$("script:last").parent().on("click", "a", function(){
				alert("Клик 1");
			});
	</script>
	<a>Нажимаем</a>
</div>
<div> <!-- К этому элементу нужно прикрепить все мои события -->
	<script>
			$("script:last").parent().on("click", "a", function(){
				alert("Клик 2");
			});
	</script>
	<a>Нажимаем</a>
</div>

ruslan_mart 14.12.2014 10:18

Вы меня конечно извините, но по моему это говнокодинг. Лучше уж вешать события через HTML-атрибуты, вызывая тем самым нужную ф-цию.

mpak 15.12.2014 00:06

Будьте добры обьяснить свой наезд с говнокодом. Лично мое мнение противоположное. Чем больше навешивается классов и идентификаторов, тем более атрибутов не по случаю тем больше это считаю говнокодом. Каждый, кто работает не разбирается почему висит тот или иной атрибут. Каждый предпочитает повесить свой. В итоге это превращается в месиво каждый из классов которых боишься убрать так как может что нибудь отвалиться. Говнокод это навешиваение на элемент не нужных идентификаторов. Зачем они если можно обойтись без них?.

Всегда считал функцию

$(function(){
})

Обязательной. Читал, что это связано выполнением скрипта, что он должен выполняться после прогрузки всех элементов. А в коде выше jQuery код не обернут и тем самым выполняется по мере загрузки страницы. Есть какая нибудь принципиальная разница с оберткой или без?

рони 15.12.2014 01:40

Цитата:

Сообщение от mpak
Читал, что это связано выполнением скрипта, что он должен выполняться после прогрузки всех элементов. А в коде выше jQuery код не обернут и тем самым выполняется по мере загрузки страницы. Есть какая нибудь принципиальная разница с оберткой или без?

если вы не ответили в своём вопросе на ваш вопрос, то прочитайте ещё раз.
коду нужно не все элементы а те с которыми этот код работает ... поэтому в jquery решили лучше подождать пока все загрузятся, чтобы наверняка был элемент с которым кодер, хотел поработать, но хитрый кодер, наверняка сможет навесить функцию на несуществующий элемент, чтоб потом возмущаться почему ничего не работает :write:

jsnb 15.12.2014 03:02

Цитата:

Сообщение от mpak
Никакие идентификаторы в скрипте кроме место его расположения не используется. Очень удобно.

И чем это удобнее? Замена шила на мыло. С идентификаторами хоть можно конфиг какой-нибудь в одном месте создать, а с таким подходом идет вообще полное смешивание логики и представления.


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