не в состоянии добавить HTML с помощью jQuery (JavaScript) - PullRequest
0 голосов
/ 09 декабря 2010

В этом плагине jquery:

http://www.stahs.org.uk/jquery.infinitecarousel.bak

Есть такая строка:

            $(obj).append('<div id="textholder'+randID+'" class="textholder" style="position:absolute;bottom:0px;margin-bottom:'+-imgHeight*o.textholderHeight+'px;left:'+$(obj).css('paddingLeft')+'"></div>');

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

$(obj).append('<div id="textholder'+randID+'" class="textholder" style="position:absolute;bottom:0px;margin-bottom:'+-imgHeight*o.textholderHeight+'px;left:'+$(obj).css('paddingLeft')+'"></div>');
            console.log($('#textholder'+randID));
            $('#textholder'+randID).append('<div style="display:table-cell; height: 94.25px; width: 1000px; vertical-align:bottom;"></div>'); 

Консоль выводит это:

[div#textholder35196647.textholder]
[div#textholder62315889.textholder]
[div#textholder95654959.textholder]

Тем не менее, мое вышеупомянутое приложение не работает. Вложенный div никогда не появляется, поэтому, когда я позже сделаю это:

                    if(t != null)
                {
                    $('#textholder'+randID+' div').html(t).animate({marginBottom:'0px'},500); // Raise textholder
                    showminmax();
                }

Текст не становится видимым, потому что вложенный div никогда не создается.

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

 $('#textholder'+randID+' div').html(t)

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

Это тоже не работает:

                var $texthold = jQuery('<div id="textholder'+randID+'" class="textholder" style="position:absolute;bottom:0px;margin-bottom:'+-imgHeight*o.textholderHeight+'px;left:'+$(obj).css('paddingLeft')+'"></div>');
            $(obj).append($texthold);
            $texthold.append('<div></div>')

Спасибо за ответ.

Ответы [ 4 ]

0 голосов
/ 09 декабря 2010

Похоже, это сработало:

            function showtext(t)
            {

                if(t != null)
                {   

                    if(typeof $('#textholder'+randID).find('div')[0] == 'undefined'){
                        $('#textholder'+randID).append('<div style="display:table-cell; height: 94.25px; vertical-align:bottom;"></div>');
                    }

                    $('#textholder'+randID+' div').html(t);

                    $('#textholder'+randID).animate({marginBottom:'0px'},500); // Raise textholder
                    showminmax();

                }
            }

Это просто сумасшествие, что мне пришлось прибегнуть к использованию typeof, чтобы проверить, объявлен ли div или нет. Почему автор плагина решил случайным образом назначить целые числа как идентификаторы div, мне не понятно. При этом кажется, что javascript испытывает трудности с сохранением случайно созданного идентификатора. Это мое единственное объяснение необычного поведения, которое я мог придумать.

0 голосов
/ 09 декабря 2010

Вы уверены, что $ (obj) действительно относится к элементу, к которому вы хотите добавить? На всякий случай, вы можете попробовать это наоборот:

$('<div id="textholder'+randID+'" class="textholder" style="position:absolute;' 
    +'bottom:0px;margin-bottom:'+(-imgHeight*o.textholderHeight)
    +'px;left:'+$(obj).css('paddingLeft')+'"></div>'
).appendTo(obj);
0 голосов
/ 09 декабря 2010

Попробуйте:

$(obj).after('html');

Документация здесь .

0 голосов
/ 09 декабря 2010

Звучит так, как будто randID было изменено между строкой $(obj).append ... и добавленной строкой $('#textholder'+randID) .... Вы уверены, что значение randID одинаково в двух строках?

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