Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对随后创建的元素执行某些操作_Javascript_Jquery - Fatal编程技术网

Javascript 对随后创建的元素执行某些操作

Javascript 对随后创建的元素执行某些操作,javascript,jquery,Javascript,Jquery,我正在编写一个简单的Django支持的记事本应用程序,并使用它进行标记和语法突出显示: 因此,当您单击其中一个注释时,它将显示在最右侧的区域中。当前的工作方式如下:每当您单击其中一个注释时,就会触发一个AJAX请求,该请求将调用呈现页面特定部分的Django视图: $(document).ready(function() { $(document).on('click', '.note', function() { let clickedNote = $(this); co

我正在编写一个简单的Django支持的记事本应用程序,并使用它进行标记和语法突出显示:

因此,当您单击其中一个注释时,它将显示在最右侧的区域中。当前的工作方式如下:每当您单击其中一个注释时,就会触发一个AJAX请求,该请求将调用呈现页面特定部分的Django视图:

$(document).ready(function() {
  $(document).on('click', '.note', function() {
    let clickedNote = $(this);
    const pk = clickedNote.attr('id');
    const url = Urls['notes:show-note']();
    $.ajax({
      url: url,
      data: {
        'pk': pk
      },
      success: function(response) {
        $('.note-container').html(response);
        $('.note').each(function() {
          $(this).css({'background-color': 'white'});
        });
        clickedNote.css({'background-color': '#F9FAFC'});
      }
    });
  });
});
以下是示例响应在呈现时的样子:

<div class="note-container">
  <h3>small Python snippet</h3>
  <div class="description martor-preview">
    <h1>Small Python snippet</h1>
    <pre>
      <code class="python">
        class App(tk.Frame):
            def spam(self):
                return 'eggs'
      </code>
    </pre>
  </div>
</div>

小Python片段
小Python片段

类应用程序(tk.Frame):
def垃圾邮件(自我):
返回“鸡蛋”
我的问题是页面的这一部分没有突出显示语法,因为元素是随后创建的。以下是我当前突出显示代码块的方式:

  $.ajax({
    ...
      success: function(response) {
        $('.note-container').html(response);

        ...

        // *** syntax-highlight new <pre> tags ***
        $('.note-container pre').each(function(i, block) {
          hljs.highlightBlock(block);
        });

      });
    ...

$(文档).ready(函数(){
$('pre')。每个(函数(i,块){
高亮度块(块);
});    
});
…因此在此之后创建的元素不会高亮显示。我想知道如何处理新创建的元素,即如何突出显示随后创建的代码块?

在每次ajax响应后(即在ajax成功处理程序中),需要调用hljs语法高亮显示程序:

$.ajax({
...
成功:功能(响应){
$('.note container').html(响应);
...
//***语法突出显示新标记***
$('.note container pre')。每个(函数(i,块){
高亮度块(块);
});
});
...

我建议尝试DOM变异Observer@ControlAltDel不需要DOM变异观察者,因为他可以简单地突出显示ajax成功处理程序中的代码。
  $.ajax({
    ...
      success: function(response) {
        $('.note-container').html(response);

        ...

        // *** syntax-highlight new <pre> tags ***
        $('.note-container pre').each(function(i, block) {
          hljs.highlightBlock(block);
        });

      });
    ...