Проблема парсинга HTML с помощью jQuery, regex и Firefox - PullRequest
0 голосов
/ 12 ноября 2010

Я вынужден проанализировать некоторый HTML на стороне клиента (и да, это действительно единственный вариант в этом случае), но у меня возникли небольшие проблемы в Firefox только со следующим:

 $('#Extensions').load('/advanced/admin/config.php?type=setup&display=extensions #container li'
   ,function(){
    $('li').each(function(){

     var liRow=$(this).html();
     var reExten=/([0-9]+)/g;
     var extension = liRow.match(reExten)[0]

     var reName=/>([a-zA-z0-9\s]+ *)/g;
     var matchName = reName.exec(liRow);
     var name = matchName[1]

    });
   }
  );

HTML-код, возвращаемый из load, выглядит следующим образом:

<a href="file.php?type=A&amp;extension=1001">Test Extension &lt;1001&gt;</a>

Регулярное выражение работает нормально, если вы скопируете и вставите его в консоль Firefox JS, а код в целом отлично работает в Internet Explorer 7/8/9.

Итак, вот немного хитрости. В Firefox matchName равен нулю на каждой другой итерации .each. Пример вывода из Firebug:

LOG: Matches: The Boss
LOG: data: <A href="file.php?type=A&amp;extension=13">The Boss &lt;13&gt;</A>
LOG: regex: />([a-zA-z0-9\s]+ *)/g;
LOG: Matches: Test Extension
LOG: data: <A href="file.php?type=A&amp;extension=1001">Test Extension &lt;1001&gt;</A>
LOG: regex: />([a-zA-z0-9\s]+ *)/g;
LOG: Matches: John Smith
LOG: data: <A href="file.php?type=A&amp;extension=3801">John Smtih&lt;3801&gt;</A>
LOG: regex: />([a-zA-z0-9\s]+ *)/g;
LOG: Matches: Guy Smiley
LOG: data: <A href="file.php?type=A&amp;extension=3802">Guy Smiley &lt;3802&gt;</A>
LOG: regex: />([a-zA-z0-9\s]+ *)/g;
LOG: Matches: 3803
LOG: data: <A href="file.php?type=A&amp;extension=3803">Jane Doe &lt;3803&gt;</A>
LOG: regex: /extdisplay=([0-9]+)/g
LOG: Matches: 3804
LOG: data: <A href="file.php?type=A&amp;extension=3804">John Doe &lt;3804&gt;</A>
LOG: regex: />([a-zA-z0-9\s]+ *)/g;

Наконец, кажется, что это происходит только при использовании re.exec и никогда не включается str.match(re). Я в полном недоумении и начинаю с этого уже час, поэтому надеюсь, что вопрос имеет какой-то смысл!

1 Ответ

0 голосов
/ 12 ноября 2010

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

Problem at line 1 character 23: Bad line breaking before ','.

$('#Extensions').load('/advanced/admin/config.php?type=setup&display=extensio...

Problem at line 7 character 45: Missing semicolon.

var extension = liRow.match(reExten)[0]

Problem at line 11 character 29: Missing semicolon.

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