Неисправен ли JQuery (..). Html () в jQuery 1.3.2? - PullRequest
8 голосов
/ 31 августа 2009

Код здесь не возвращает ожидаемого:

jQuery('<div>Look here: [ jQuery0="null" ]</div>').html()

Скорее вы получите:

Look here: [ ]

Исходный код jQuery, о котором идет речь:

html: function( value ) {
        return value === undefined ?
                (this[0] ?
                        this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
                        null) :
                this.empty().append( value );
},

Какая мотивация стоит за .replace? У меня нет времени просматривать остальную часть jQuery, но такой код заставляет меня задуматься, стоит ли вообще использовать jQuery в производстве.

Ответы [ 2 ]

11 голосов
/ 31 августа 2009

Какая мотивация стоит за .replace?

Чтобы скрыть атрибуты, которые jQuery использует для внутренних целей.

код, подобный этому, заставляет меня задуматься, стоит ли вообще использовать jQuery в производстве.

Да, у меня была точно такая же реакция. Это просто невероятно неряшливо. Попытка обработать HTML с помощью regexp - это тип наивного взлома, который вы ожидаете от постеров, впервые задававших вопросы, а не такого поведения, которое вы надеетесь увидеть в рамках, так как многие пользователи SO, похоже, поклоняются.

Это не единственное место, где jQuery срабатывает, пытаясь разобрать разметку с помощью регулярного выражения; некоторые вещи селектора тоже сломаны. Это могут быть неясные угловые случаи, но для меня это огромный красный флаг, указывающий на неправильный подход.

4 голосов
/ 31 августа 2009

Этот код является новым в 1.3.2, его не было в 1.3.1. Мне кажется, что jQuery использует атрибуты, чьи имена начинаются с «jQuery» для хранения данных об элементах, и это его способ не показывать это вам, когда вы запрашиваете html back.

Это явно не ошибка. Автор намеревался удалить этот HTML, прежде чем вернуть вам строку.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...