Селектор jquery не работает с элементом внутри тега скрипта с использованием Cassette

При попытке получить доступ к загрузке данных с помощью $("#index").data("onload") я получаю ответ 'undefined':

<script type="text/html">
        <section id="index" data-onload="app.load()">
            <div data-bind="text:name"></div>
        </section>
</script>

Без окружающего тега script все работает нормально. Он загружается с помощью Cassette, которая заключает его в теги сценария.

Что я делаю неправильно?


person Alexander Zeitler    schedule 13.05.2012    source источник
comment
Почему это должно быть внутри тега <script>?   -  person gdoron is supporting Monica    schedule 14.05.2012
comment
вы смешиваете HTML с Javascript   -  person Roko C. Buljan    schedule 14.05.2012
comment
@gdoron загружается с помощью cassette.net, который заключает его в теги скрипта.   -  person Alexander Zeitler    schedule 14.05.2012
comment
Информация о типе text/html: stackoverflow.com/questions/3241387/   -  person cliffs of insanity    schedule 14.05.2012
comment
Чего вы на самом деле пытаетесь достичь?   -  person Roko C. Buljan    schedule 14.05.2012
comment
@AlexanderZeitler: В следующий раз заранее добавляйте все важные детали в свой пост, теперь у вас есть люди, пытающиеся помочь вам с неправильной проблемой, потому что вопрос выглядит нелепо без необходимого контекста.   -  person Wesley Murch    schedule 14.05.2012
comment
Похоже, это HTML-шаблон, часть пользовательского интерфейса. Он использует JS-фреймворк на стороне клиента, который в какой-то момент должен ссылаться на этот шаблон и отображать его в DOM. Пока этот шаблон еще не отрендерен, OP не сможет манипулировать HTML. Однако после фактического отображения этого шаблона на странице #index должен успешно совпасть.   -  person Benjamin Cox    schedule 14.05.2012
comment
@AlexanderZeitler: Извините за вас, чем больше ответов на сообщение, тем меньше внимания оно обычно привлекает. Пробовали ли вы добавить БОЛЬШЕ JQUERY?? Удачи ;)   -  person Wesley Murch    schedule 14.05.2012


Ответы (3)


Содержимое тега script не является частью дерева DOM для вашего документа. Если подумать, это имеет смысл, поскольку синтаксис JavaScript не является допустимым HTML, и вы можете просто вставить JavaScript между тегами script.

Как правило, внутри тега script не помещается никакой HTML-код. Присутствие JavaScript в атрибуте data-onload не требует использования тега script, поэтому проще всего просто стереть тег script.

С другой стороны, если вы пытаетесь использовать этот фрагмент HTML в качестве шаблона, скажем, для клиентской среды MVC. Это единственный раз, когда я видел скрипт type="text/html", который имел смысл. В этом случае вам потребуется найти раздел #index после отображения шаблона в DOM. До этого этот HTML фактически не существовал нигде, где вы могли бы получить к нему доступ с помощью JQuery.

person Benjamin Cox    schedule 13.05.2012

Элементы скрипта с неизвестным типом содержимого будут игнорироваться.
Браузер не знает, что делать со скриптом типа text/html.

Вам просто нужно:

    <section id="index" data-onload="YourTextValue">
        <div data-bind="YourTextValue"></div>
    </section>
person Roko C. Buljan    schedule 13.05.2012

Насколько мне известно, код внутри тега <script> обычно компилируется как Javascript и не является частью DOM. И я не уверен, является ли <script type="text/html"> действительной комбинацией тега/атрибута.

Удалите тег script, он вам не нужен.

person Johannes Klauß    schedule 13.05.2012