JQuery парсинг пользовательских тегов странно - PullRequest
0 голосов
/ 24 мая 2011

У меня проблемы со следующим: 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 ]

2 голосов
/ 24 мая 2011

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

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

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

$('[blah]')...

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

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

2 голосов
/ 24 мая 2011

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

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

...