Тег скрипта с type = text / html и src = loaded, но игнорируется jQuery

На моей странице есть тег:

    <script id='header' src='/Templates/Shared/Header.tmpl.html' type='text/html'></script>

Firebug сообщает мне, что Firefox 5 запрашивает этот ресурс. На вкладке HTML я могу перейти к элементу скрипта и увидеть, что он содержит содержимое /Template/Shared/Header.tmpl.html.

Однако jQuery настаивает на том, чтобы тег скрипта был пуст. $ ('# header'). html () возвращает пустую строку. Не понимаю почему.

Да, я могу загрузить файл с помощью $ .get () и использовать $ ('# header'). Html (data) для установки содержимого. Тогда я смогу использовать его так, как я ожидал. Это, очевидно, генерирует второй запрос, которого я бы хотел избежать.


person Jason Dentler    schedule 10.07.2011    source источник
comment
Интересно, строгий ли это jQuery? Вы пробовали использовать .text () вместо .html ()? Я не уверен, что это сработает, потому что я не знаю, является ли тег script на самом деле частью DOM. Я думаю, что плагин метаданных может получить доступ к информации внутри тегов скрипта, но я не использовал его лично. plugins.jquery.com/project/metadata   -  person Aaron Ray    schedule 10.07.2011
comment
.text () или .html () в этом случае не имеет значения, но ваша идея о том, что вы не находитесь в DOM, кажется верной. Ни один из внешних скриптов не имеет содержания. Я сейчас ищу плагин метаданных. Спасибо!   -  person Jason Dentler    schedule 10.07.2011
comment
Нашел аналогичный вопрос без хорошего ответа: stackoverflow.com/questions/148441/   -  person Jason Dentler    schedule 10.07.2011
comment
Не уверен, почему исходный пост включает HTML-страницу в качестве сценария. Тег script обычно имеет ссылку на файл Javascript в атрибуте src и тип text / javascript или вообще не имеет атрибута type.   -  person eel ghEEz    schedule 03.11.2015
comment
Это, очевидно, генерирует второй запрос, который я бы хотел избежать. Src элемента также генерирует запрос, поэтому я не вижу, где находится дополнительный запрос ... просто говорю   -  person santiago arizti    schedule 08.03.2018


Ответы (2)


Я знаю, что это устарело, но ответ прост. Тег скрипта просто не содержит текста или HTML.

<script id='...' src='...' type='...'></script>

В теге нет элементов или текста. Сценарий будет запрошен и загружен в память (если тип сценария имеет обработчик), но сам текст не будет вставлен в DOM.

person cwharris    schedule 03.01.2013
comment
есть ли тогда свойство элемента dom, к которому вы можете получить доступ, где хранится результат запроса? что-то вроде document.getElementById("myHtmlScript").contents? - person santiago arizti; 08.03.2018
comment
Прошло много времени с тех пор, как я глубоко изучил API DOM. Что вы пытаетесь достичь? Традиционно говоря, если вы хотите загрузить какой-либо другой ресурс uri в виде текста в переменную, вы должны использовать ajax или jsonp (который в основном просто загружает скрипт, который затем выполняется и добавляет текст в документ). Вы пытаетесь достичь чего-то конкретного? - person cwharris; 08.03.2018
comment
Совершенно очевидно, что если A истинно, а B истинно, то A + B также будет истинным, A - это тот факт, что <script> может иметь либо встроенный атрибут содержимого , либо src, а B - это тот факт, что тег <script> может быть либо type="application/javascript", либо type="text/html" среди других параметров. - person santiago arizti; 09.03.2018

Это старая проблема, но она все еще существует в Firefox. Я использую обходной путь:

function getHtml(selector) {
  var $element = $(selector);
  var html = $element.html();

  if (!html ) {
    // copy all the children elements to a dummy DIV, which, unlike the SCRIPT have no problem providing the html in Firefox
    html= $('<div />').append($element.children().clone()).html();
  }
  return html;
}
person nasskov    schedule 06.07.2016