А теперь к делу. Просто вызванная функция в скрипте имеет контекст window. Доказательство тому пример :
<script type="javascript"> function me(){ alert(this); } me(); //Или как в следуйщей строке //(function(){alert(this);})(); </script>
А теперь давайте достанем тег скрипт в котором она выполняется:
<script type="text/javascript" id="myScritp"> function myScriptId(){ //Получаем масив тегов скрипт определенных на странице в данный момент var existingScripts = document.getElementsByTagName('script'); // Получаем тег скрипт в котором выполняемся var myScriptTag = existingScripts[existingScripts.length - 1]; alert(myScriptTag.id); } myScriptId(); </script>
Как это работает : document.getElementsByTagName('script') вернет нам масив объектов script по порядку их попадания в DOM. А поскольку инлайн скрипт выполняется во время построения DOM, то на момент вызова в нем будут скрипты по порядку их вставки в HTML до текущего и включая его как последний элемент массива.
На первый взгляд статью можно и закончить, но хочется упомянуть один нюанс - IE.
Как вы думаете какой вывод будет у следующего примера?
<div id="myDiv"> <script type="text/javascript" id="myScritp"> function myScriptId(){ var existingScripts = document.getElementsByTagName('script'); //Получаем масив тегов скрипт определенных на странице в данный момент var myScriptTag = existingScripts[existingScripts.length - 1]; // Получаем тег скрипт в котором выполняемся alert(myScriptTag.parentNode.id); } myScriptId(); </script> <div>
myDiv ?? Уверены ?? А в IE ?? Для того что бы в IE все заработало надо лишь перед тегом вставить хотя бы
<div id="myDiv"> <script type="text/javascript" id="myScritp"> function myScriptId(){ var existingScripts = document.getElementsByTagName('script'); //Получаем масив тегов скрипт определенных на странице в данный момент var myScriptTag = existingScripts[existingScripts.length - 1]; // Получаем тег скрипт в котором выполняемся alert(myScriptTag.parentNode.id); } myScriptId(); </script> <div>
Кажется, не работает в FF :( Находит всегда последний скрипт
ОтветитьУдалитьА Вы запускаете скрипт до иди после загрузки DOM'а ?
ОтветитьУдалить