Парсинг строки HTML с Ajax/jQuery

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

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

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

Внутрипроцедурный анализ устраняет те проблемы, просто фокусируясь на единственной процедуре. Для работы, однако, они обычно должны представлять "язык аннотации", который Вы используете, чтобы описать метаданные для аргументов процедуры, возвратить типы и поля объекта. Для C++ те вещи обычно реализуются через макросы, которыми Вы украшаете вещи. Аннотации тогда описывают вещи как "это поле, никогда не является пустым", "этот строковый буфер охраняет это целочисленное значение", "к этому полю может только получить доступ поток маркированный 'фон'", и т.д.

аналитический инструмент тогда возьмет аннотации, которые Вы предоставляете и проверяете, что код, который Вы написали на самом деле, соответствует аннотациям. Например, если Вы могли бы потенциально выдать пустой указатель к чему-то, что отмечено как не пустой, он отметит ошибку.

В отсутствие аннотаций, инструмент должен принять худшее, и так сообщит о большом количестве ошибок, которые не являются действительно ошибками.

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

Wether или не инструмент стоит того, зависит от Вашей организации. Каковы виды ошибок, Вы - бит большинством? Они - ошибки переполнения буфера? Действительно ли они являются пустыми - разыменовывают или ошибки утечки памяти? Они распараллеливают проблемы? Они, "ой мы не полагали, что сценарий", или "не протестировали версию Chineese нашего продукта, работающего на литовской версии Windows 98?".

, Как только Вы выясняете, каковы проблемы, тогда необходимо знать, стоит ли это усилия.

инструмент, вероятно, поможет с переполнением буфера, пустой указатель разыменовывают, и ошибки утечки памяти. Существует шанс, что может помочь с ошибками многопоточного выполнения, если это имеет поддержку "окраски потока", "эффектов" или анализа "полномочий". Однако те типы анализа являются довольно ультрасовременными, и имеют ОГРОМНЫЕ письменные трудности, таким образом, они действительно идут с некоторым расходом. Инструмент, вероятно, не поможет ни с каким другим типом ошибок.

Так, это действительно зависит от того, какое программное обеспечение Вы пишете, и с какими ошибками Вы сталкиваетесь наиболее часто.

5
задан Community 23 May 2017 в 12:07
поделиться

3 ответа

Я думаю, что новые строки в moo.html могут вас сбить с толку.

Любые новые строки в вашем html в конечном итоге будут анализироваться jQuery и сохраняться как элементы текстового узла "\ n" . В результате $ (code) .each прекратит итерацию, когда будет обнаружен первый из этих узлов и вы вызовете для него .html () ( html () ] не работает с типами узлов, отличных от Element).

Вам нужно получить только div в вашем html:

var divs = $(code).filter(function(){ return $(this).is('div') });
divs.each(function() {
    alert( $(this).html() )
})
14
ответ дан 18 December 2019 в 13:16
поделиться

Попробуйте:

html = $("div", code);
html.each(function() {
    alert($(this).html());
});

Причина, по которой вы не можете сделать это так, как есть, заключается в том, что при синтаксическом анализе HTML jQuery хочет иметь единственный корневой элемент. Если этого не произойдет, вам придется сделать это, как описано выше. Следующий HTML / JS также будет работать:

var html = $(code);
html.children().each(....);

<div>
    <div id='test'>zebra</div>
    <div id='foo'>bar</div>
</div>
0
ответ дан 18 December 2019 в 13:16
поделиться

попробуйте $ ('div', code) .each вместо этого .. вот так ...

$('div', code).each( function () {
  alert($(this).text());
});

Хотя я не тестировал ...

0
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: