JQuery странным образом анализирует пользовательские теги

У меня проблемы со следующим: http://jsfiddle.net/x55LD/1/

Я пытаюсь разобрать пользовательские теги с помощью jQuery 1.6. Он работает правильно, за исключением случаев, когда тег находится внутри <select> тег. Например:

var string = '<div><blah></blah><select><blah></blah></select></div>';

$(string).find('blah').each(function() {
    console.log("Found tag!");
});

Это будет регистрировать только одно сообщение, несмотря на наличие двух <blah> теги. Второй <blah> тег в пределах <select> не будет признан Кто-нибудь знает, почему это может происходить?

2 ответа

Решение

Проблема в том, что синтаксический анализ выполняет не JavaScript или jQuery, а браузер. Хотя вы можете рассмотреть это <select> тэг, чтобы быть вашей собственной сделкой, браузер не согласен и ожидает, что она будет содержать только <option> или же <optgroup> теги.

Когда вы оборачиваете строку с помощью jQuery таким образом, внутренне происходит то, что jQuery передает строку в браузер как "innerHTML" временного элемента. Браузер ожидает, что у него есть HTML для работы, поэтому, когда он видит незаконную разметку, он обрабатывает его в основном так, как он хочет. Может быть, некоторые браузеры оставят <blah> тег один, а другие нет.

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

<div><span blah></span><select blah></select></div>

Тогда вы можете использовать атрибут селектора:

$('[blah]')...

Вы также можете использовать атрибуты стиля HTML5, такие как data-something="my data" и использовать $.data получить значение напрямую.

Поскольку содержимое нестандартного тега, вероятно, все равно будет визуализировано, нет никакой разницы в этом по сравнению с простым использованием тега span с пользовательским атрибутом. Я не уверен, чего именно вы пытаетесь достичь с помощью пользовательского тега внутри группы параметров, но я не думаю, что вы хотите, чтобы он отображался, поэтому, вероятно, будет достигнут пользовательский тег для выбора или определенного параметра. твоя цель

Другие вопросы по тегам