【问题标题】:Appended element with missing styles缺少样式的附加元素
【发布时间】:2018-11-05 21:50:54
【问题描述】:

我正在尝试将动态追加与 JavaScript 一起使用,但追加的结果显示时没有主样式。我已经尝试就其他问题做一些建议,但没有一个产生显着的结果,有什么建议吗?

对我的问题没有帮助的链接:

Applying styles from CSS to newly appended elements

Appending Child resets previous appended element value on JavaScript

Append Style to DOM not Replacing Existing

appending html with jquery but don't get style

我有什么:

$(document).ready(function() {
  var max_fields = 4;
  var wrapper = $(".separator");
  var add_button = $(".btn-x");

  var x = 0;
  $(add_button).click(function(e) {
    e.preventDefault();
    if (x < max_fields) {
      x++;
      $(wrapper).append(`
<div class='tabbable paper-shadow relative' data-z='0.5' id='div'>
  <div class='tab-content'>
    <div id='course' class='tab-pane active'>
      <div class='form-group'>
        <textarea name='info${x}' id='info${x}' cols='30' rows='10' class='summernote'></textarea>
      </div>
      <div class='text-center'>
        <button type='button' class='delete'>-</button>
      </div>
    </div>
  </div>
</div>`);
      //  add input box
    } else {
      alert('You Reached the limits')
    }
  });

  $(wrapper).on("click", ".delete", function(e) {
    e.preventDefault();
    $(this).parent().parent().parent().parent().remove();
    x--;
  })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="tabbable paper-shadow relative" data-z="0.5">

  <!-- Panes2 -->
  <div class="tab-content">

    <div id="course" class="tab-pane active">
      <div class="form-group">
        <label for="info">Conteúdo</label>
        <textarea name="info" id="info" cols="30" rows="10" class="summernote"></textarea>
      </div>
      <div class="text-center">
        <button type="button" class="btn-x">+</button>
      </div>
    </div>

  </div>
  <!-- // END Panes2 -->

</div>

提前致谢:D

【问题讨论】:

  • 你为什么要做$(wrapper)?您已经将元素存储在变量包装器中,因此无需在该元素上重新初始化 jQuery。它已经是一个 jQuery 对象。很多人只是将变量命名为 $wrapper 以表明它是一个 jQuery 对象。 -- 无论如何,您确定将内容放入正确的框中并且没有嵌套样式吗?还确定元素不在 iframe 中?另外,请确保样式不在 ID 上。哦,还有,去掉附加 HTML 中的那个 ID。您不允许在一个页面上拥有多个同名 ID。
  • “主要风格”是什么意思?
  • 如果样式显示不正确,则可能是缺少类、结构不完整或您的 css 错误。没有minimal reproducible example,我们无法评估问题
  • 你的 HTML 中没有 class="separator",所以 $(wrapper).append() 什么都不做。
  • 在链接parent.parent.parent 时也更好地提高可读性、调试和任何以后的结构更改以使用closest('.parentClassName')

标签: javascript jquery html css append


【解决方案1】:

感谢@Barmar 的帮助!

我通过首先附加链接到我试图附加的元素的 .js 文件解决了这个问题。

修改后的代码:

$(document).ready(function() {
       var max_fields      = 4;
       var wrapper         = $(".separator");
       var add_button      = $(".btn-x");

       var x = 0;
       $(add_button).click(function(e){
           e.preventDefault();
           if(x < max_fields){
               x++;

               var myfunc1 = document.createElement("script");
               myfunc1.type = "text/javascript";
               myfun1.src = "js/myfunctions1.js";
               $("head").append(myfunc1);
               var myfun2 = document.createElement("script");
               myfun2.type = "text/javascript";
               myfun2.src = "js/myfunctions2.js";
               $("head").append(myfunc2);

               wrapper.append(`<div class='tabbable paper-shadow relative' data-z='0.5' id='div'>
                                      <div class='tab-content'>
                                        <div id='course' class='tab-pane active'>
                                            <div class='form-group'>
                                              <textarea name='info${x}' id='info${x}' cols='30' rows='10' class='summernote'></textarea>
                                            </div>
                                            <div class='text-center'>
                                                <button type='button' class='delete'>-</button>
                                            </div>
                                        </div>
                                      </div>
                                    </div>`); //add input box
           } else {
                alert('You Reached the limits')
                }
       });

       wrapper.on("click",".delete", function(e){
           e.preventDefault(); 
           $(this).parent().parent().parent().parent().remove();
           x--;
       })
});

据我了解,我需要这样做,因为该页面只加载该自定义文本区域的功能一次。我认为问题与 CSS 样式无关,而是与那些未为附加元素加载的函数有关。

【讨论】:

  • 您应该显示您对代码所做的更改。从这个答案中不清楚你实际上做了什么。
  • 您还应该解释这是如何解决它的。这对我来说似乎难以置信。 CSS 不关心何时添加到文档中,它只适用于 DOM 中的任何内容。
  • 我试图改进答案,再次感谢您。如果还有什么遗漏,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
相关资源
最近更新 更多