jQuery append 函数只是附加 html 而不是与之相关的类

Posted

技术标签:

【中文标题】jQuery append 函数只是附加 html 而不是与之相关的类【英文标题】:jQuery append function is just appending the html but not the classes related to it 【发布时间】:2021-07-29 14:46:40 【问题描述】:

我正在使用 php laravel,所以它使用刀片模板来呈现视图。以下是附加 html 脚本的 javascript 代码:-

$(function () 
   var count = 0;
   $("#min_bonus_value").click(function () 
      count++;
      var min_bonus_html =
                    '<div class="min_bonus_row">' +
                        '<hr>' +
                        '<div class="row">' +
                            '<div class="col-md-2">' +
                                '<div class="form-group">' +
                                    '<label for="bonus_day[' + count + ']">@lang('admin.message759')<span class="text-danger">*</span></label>' +
                                    '<select class="select2 form-control" id="bonus_day[' + count + ']" name="bonus_day[' + count + '][]" data-placeholder="@lang('admin.message759')" multiple>' +
                                        '<option value="1">Monday</option>' +
                                        '<option value="2">Tuesday</option>' +
                                        '<option value="3">Wednesday</option>' +
                                        '<option value="4">Thursday</option>' +
                                        '<option value="5">Friday</option>' +
                                        '<option value="6">Saturday</option>' +
                                        '<option value="7">Sunday</option>' +
                                    '</select>' +
                                '</div>' +
                            '</div>' +
                        '</div>' +
                    '</div>';

以下是需要附加上述 html 的刀片模板代码,我想附加 'select2' 类,该类的样式为选择多天,但徒劳无功:-

<div id="minimum_bonus">
</div>

【问题讨论】:

我不明白这个问题。 &lt;div id="minimum_bonus"&gt; 应该代表什么?您要在其中附加代码的父元素? 除此之外,我希望 data-placeholder="@lang('admin.message759')" 会破坏您的 JS 语法,因为您在单引号中使用单引号。您的浏览器控制台是否报告任何错误? 如何追加?我们可以看到代码吗? 【参考方案1】:

我可能不在这里,但是当您说“不是类”时,您实际上是指 Javascript/jQuery 功能吗?

如果是这样,我将尝试解释发生了什么:当您初始化一个 jQuery 插件(如 select2)时,它会在您初始化它时作用于 DOM 中存在的内容。因此,如果您稍后创建新项目,这些将不具有 select2 功能,除非您为所述新项目再次初始化它。

我建议您创建一个函数来初始化 select2 并在您向 DOM 添加新元素时调用它。您需要以某种方式挑选出已经初始化的元素。您可以使用一个类来执行此操作,在此示例中,该类是“select2-enabled”。像这样:

function initSelect2() 
  $(".select2").each(function()
    if (!$(this).hasClass('select2-enabled')) 
      $(this).addClass('select2-enabled');
      $(this).select2(
        // all your select2 options
      );
    
  );

然后,在您附加新的 html 之后,您可以调用您的函数来初始化新元素上的 select2:

$(parentElement).append(newHTML);
initSelect2();

【讨论】:

以上是关于jQuery append 函数只是附加 html 而不是与之相关的类的主要内容,如果未能解决你的问题,请参考以下文章

jquery 实践操作:div 动态嵌套(追加) div

jquery append方法加标签class失效

用 append() 附加大块 html

在 jQuery.each 中附加元素时出现错误

jquery中append()与appendto()用法分析

jQuery append() - 返回附加元素