jquery .replaceWith () не очень хорошо работает с .clone () в IE7 - PullRequest
1 голос
/ 24 января 2010

Я использую jQuery для создания связанного содержания, которое появляется в диалоговом окне. Функция, которую я написал для этого, находит все h4 на странице и

  • дает им id s для ссылки на
  • добавляет некоторую информацию для отображения нумерации
  • клонирует их
  • превращает клонов в li с
  • оборачивает внутренний текст в теги привязки
  • находит, что якоря добавляет функцию щелчка к якорям, чтобы закрыть диалоговое окно
  • добавляет title s и href s к якорям, поэтому ссылки указывают на исходные h4 s
  • восходит к li с
  • добавляет li s к ol диалоговому окну div

Однако в IE7 клонированные h4 s не превращаются в li s. Работает в FireFox. В IE7 все происходит так же, как и в FireFox, просто что .replaceWith(), похоже, игнорируется ... почему?

выглядит так:

$('#content h4').each(function(index) {
   index = index + 1;
    $(this)
   .attr('id', 'tutorial_' + index)
   .before(function() {
            return '<div class="how_to">HOW TO<div><span>' + index + '</span></div></div>';
        })
  .clone()
  .replaceWith("<li>" + $(this).text() + "</li>")
  .wrapInner("<a></a>")
  .find('a')
    .click(function(){
        $("#dialog").dialog("close");
    })
    .attr({
        'title': 'jump to ' + $(this).text(),
        'href': '#tutorial_' + index
    })
   .end()
  .appendTo('#dialog ol')
 });

В действии по адресу: http://f1shw1ck.com/jquery_sandbox/tutorials.html

Ответы [ 2 ]

1 голос
/ 24 января 2010

Я не очень понимаю, почему люди так любят клонировать ...:)

Я бы сделал что-то вроде

$('#content h4').each(function(index) {
   index = index + 1;
    $(this)
   .attr('id', 'tutorial_' + index)
   .before(function() {
            return '<div class="how_to">HOW TO<div><span>' + index + '</span></div></div>';
        })
  .clone()
  .html("<li>" + $(this).text() + "</li>")
  .wrapInner("<a></a>")
  .find('a')
    .click(function(){
        $("#dialog").dialog("close");
    })
    .attr({
        'title': 'jump to ' + $(this).text(),
        'href': '#tutorial_' + index
    })
   .end()
  .appendTo('#dialog ol')
 });

Но это только я :) 1006 *

РЕДАКТИРОВАТЬ: После прочтения "много" о replaceWith () - кажется, есть неразрешенная ошибка с IE7 и IE6, поскольку ... навсегда Поэтому я отказался от своей функции, взял вашу и заменил replaceWith на html - что в данном случае работает так, как вы хотите, то есть замените html элемента и вернете себя.

Что касается replaceWith, вы, вероятно, столкнулись с одной из ошибок Web и IE7;)

0 голосов
/ 24 января 2010

В этом скрипте страницы есть опечатка

http://f1shw1ck.com/jquery_sandbox/tutorials.html

строка 43:

$('#dialog ol').

Вы должны удалить эту точку

строка 61:

Не думаю, что }); должен быть там!

...