jQuery вставляет свойство nodeIndex в теги HTML в Internet Explorer 8 - PullRequest
1 голос
/ 13 июля 2011

Мы используем jQuery 1.5.1 на сайте, над которым я работаю.Недавно я обнаружил проблему с моим HTML в Internet Explorer 8

Проблема заключается в том, что свойства «nodeIndex» вставляются в DOM, предположительно, с помощью jQuery (см. Ниже другой вопрос StackOverflow, в котором упоминается nodeIndex).Свойства отсутствуют в источнике страницы - только в DOM, а затем проверяют его с помощью (потрясающего) инструмента разработчика IE8.

DOM в IE8:

<DIV nodeIndex="4">
  <B nodeIndex="1">bold</B>
  <BR nodeIndex="2">
  <I nodeIndex="3">italics</I>
  <BR nodeIndex="4">
  <U nodeIndex="5">underline</U>
  <BR nodeIndex="6">
</DIV>

DOM в FF5(и Chrome 12):

<div>
  <b>bold</b>
  <br>
  <i>italics</i>
  <br>
  <u>underline</u>
  <br>
</div>

Проблема в том, что DIV - это текст сообщения на форуме.Если пользователь хочет процитировать сообщение форума, html сообщения должен быть преобразован в BBCode (потому что старые сообщения форума используют теги BBCode для разметки), с сохраненной разметкой форматирования, и копируется в текстовую область, в которую пользователь записываеттекст для нового сообщения на форуме (включая цитируемый текст).

Используя JavaScript / jQuery, было бы просто заменить html-теги соответствующими тегами BBCode, но добавление свойства nodeIndex делает необходимым добавитьзамена регулярного выражения на свойство nodeIndex, которое выглядит как некрасивый хак.

Может кто-нибудь сказать мне, почему свойства nodeIndex добавляются в IE8 (и IE7), и это jQuery, который добавляет их - и что более важно: Могу ли я избавиться от них лучше, чем с помощью замены регулярного выражения?

Сайт, на котором я работаю, использует несколько различных сценариев JavaScript / jQuery, поэтому может возникнуть конфликт или, по крайней мере, некоторое непредвиденное поведение, вызванное сочетанием сценариев.

Редактировать: свойства недоступны, когда JavaScript отключен в IE.

Другой вопрос StackOverflow, в котором упоминается nodeIndex: Является ли nodeIndex допустимым свойством элемента DOM вIE?

1 Ответ

2 голосов
/ 13 июля 2011

Может кто-нибудь сказать мне, почему свойства nodeIndex добавляются в IE8 (и IE7), и это jQuery добавляет их -

Эти свойства добавляются Sizzle (jQueryмеханизм выбора, сравните определение объекта Sizzle.selectors в исходном коде jQuery), предположительно, в браузерах, которые изначально не поддерживают псевдокласс :nth-child CSS.

и, что более важно: Могу ли я получитьизбавиться от них лучше, чем использовать замену регулярным выражением?

Чистым способом было бы загрузить фрагмент HTML в DOM и удалить из него атрибуты.Вы можете сделать это на стороне сервера или на стороне клиента, используя сам jQuery.

var htmlText = '<DIV nodeIndex="4">Some text.<BR nodeIndex="1"></DIV>';
var $html = $("<div>" + htmlText + "</div>");
$html.find("*[nodeIndex]").removeAttr("nodeIndex");
console.log( $html.html() );
// logs "<div>Some text.<br></div>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...