Как запретить jQuery .html () автоматически экранировать атрибут href? - PullRequest
5 голосов
/ 04 февраля 2012

ОБНОВЛЕНИЕ : похоже на специфическое поведение браузера, как прокомментировал ТимВолла - как мне нормализовать работу с неэкранированной версией, надежно в кросс-браузерном режиме?

HTML:

<div id="test"><a href="#{one}">#{two}</a></div>

JS:

$('#test').html()
=> <a href="#%7Bone%7D">#{two}</a>

Обратите внимание, что #{one} в href экранирован, а #{two} нет.

Есть ли лучший способ, чем просто unescape вся строка?

unescape($('#test').html())
=> <a href="#{one}">#{two}</a>

Вот пример: http://jsfiddle.net/kenn/n8veL/

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

Прежде всего, я сомневаюсь, что есть надежное решение вашего вопроса.Основная причина проста: потому что Element.innerHTML, работающий под ним, нестандартен и зависит исключительно от реализации браузера.

Если вы хотите надежное решение, я бы предложил использовать операции DOM вместо шаблон .

0 голосов
/ 04 февраля 2012

Если вы все равно собираетесь выполнять расширение с помощью JavaScript для элемента, вы можете поместить шаблон "href" в отдельный атрибут.

<a href='#dummy' data-href='#{template}'>Hi</a>

Затем просто разверните атрибут data и отбросьте результат в реальном «href».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...