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 с пользовательским атрибутом. Я не уверен, чего именно вы пытаетесь достичь с помощью пользовательского тега внутри группы параметров, но я не думаю, что вы хотите, чтобы он отображался, поэтому, вероятно, будет достигнут пользовательский тег для выбора или определенного параметра. твоя цель