Исключение в jQuery (селектор [, контекст])

#jquery #css-selectors

#jquery #css-селекторы

Вопрос:

Кто-нибудь может сказать мне, почему я получаю исключение, используя приведенный ниже код?

 var invalidhtml = '<tr><div id="residualErrors" style="display:none;"></div><form action="" method="post"><table><tr><td></td></tr></table></form></tr>';  

var form = $("form", invalidhtml);
  

Комментарии:

1. Это не имеет смысла, ваш var invalidhtml не используется повторно, и его строка содержимого не имеет закрытия ‘, кроме того, html в строке недопустим.

2. Я предполагаю, что somehtml должен быть invalidhtml . В этом случае @Clive прав в том, что вы передаете неправильный тип данных в качестве контекста.

3. Извините за это, ребята, вы слишком быстры для меня 🙂 Исправил html (somehtml должен был быть invalidhtml)) но я собираюсь ответить на это сам, как только переполнение стека позволит мне, я включаю его, чтобы спасти кого-то еще от борьбы, через которую я прошел. По сути, ситуация выглядит следующим образом:

4. «Проблема в том, что html недопустим, поскольку под элементом tr нет элемента td. Обычно jQuery может справиться с этим, но если где-то в элементе tr также есть таблица, тогда возникает исключение «.

5. Деннис: Вы можете передать строку как «Документ». смотрите «$(«div», xml.responseXML);» на api.jquery.com/jQuery в качестве примера.

Ответ №1:

Я бы предположил, что по вашему названию somehtml вы передаете строку, когда jQuery ожидает объект.

Комментарии:

1. Вы можете передать строку как «Документ». смотрите «$(«div», xml.responseXML);» на api.jquery.com/jQuery в качестве примера.

Ответ №2:

Проблема в том, что html недопустим, поскольку под элементом «tr» нет элемента «td». Обычно jQuery может справиться с этим, но если где-то в элементе «tr» также есть «таблица», тогда возникает исключение.

Исходное место, где у меня возникла проблема, было намного сложнее html, поэтому я надеюсь, что это кому-то поможет.

Любой из приведенных ниже допустимых примеров htmlработает, недопустимый — нет.

 var invalidhtml = '<tr><form action="" method="post"><table><tr><td></td></tr></table>    </form></tr>';        

var validhtml = '<tr><form action="" method="post"></form></tr>';        

var validhtml2 = '<div><form action="" method="post"><table><tr><td></td></tr></table>    </form></div>';        

var validhtml3 = '<table><tr><td><form action="" method="post"><table><tr><td></td></tr></table></form></td></tr></table>';        

var validhtml4 = '<tr><td><form action="" method="post"><table><tr><td></td></tr></table>     </form></td></tr>';        

var form = $("form", validhtml);
form = $("form", validhtml2);
form = $("form", validhtml3);
form = $("form", validhtml4);
form = $("form", invalidhtml); // crash here in ie, proper browsers fail silently