带有jquery

时间:2016-06-10 09:12:12

标签: javascript jquery dom

是否可以使用jquery创建带有构造函数的DOM元素?

如果您向下滚动到“javascript”,我正在尝试对名为h5p的插件进行反向工程。部分您将看到以下步骤:

  1. 对象的命名空间声明(我假设不污染全局命名空间

  2. 创建实际DOM元素的consrtuctor函数

  3. 构建DOM元素的辅助辅助函数

  4. 我知道这个特定代码依赖于一个框架,但它是否可以只在一个js文件中复制?

    var H5P = H5P || {};
    
    H5P.GreetingCard = (function ($) {
      /**
       * Constructor function.
       */
      function C(options, id) {
        // Extend defaults with provided options
        this.options = $.extend(true, {}, {
          greeting: 'Hello world!',
          image: null
        }, options);
        // Keep provided id.
        this.id = id;
      };
    
      /**
       * Attach function called by H5P framework to insert H5P content into
       * page
       *
       * @param {jQuery} $container
       */
      C.prototype.attach = function ($container) {
        // Set class on container to identify it as a greeting card
        // container.  Allows for styling later.
        $container.addClass("h5p-greetingcard");
        // Add image if provided.
        if (this.options.image && this.options.image.path) {
          $container.append('<img class="greeting-image" src="' + H5P.getPath(this.options.image.path, this.id) + '">');
        }
        // Add greeting text.
        $container.append('<div class="greeting-text">' + this.options.greeting + '</div>');
      };
    
      return C;
    })(H5P.jQuery);
    

    这就是我的想象(警告:粗糙的伪代码!):

    // quick and dirty h5p prototyping
    <!DOCTYPE html>
    <html>
    <head>
      <script>import jquery here<script>
      $(document).ready(function(){
    
        // constructor for dom element
    
        // secondary helpers for dom element
    
        // initialize the element and append it to dom
    
    
      });
      </script>
    
    </head>
    <body>
      <h2> h5p prototyping</h2>
    </body>
    

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以用这种方式使用jQuery创建DOM元素:

$(document).ready(function() {
  var newDOM = $('<div/>', {
    class: 'new-dom',
    html: $('<span/>', {
      text: 'NEW DOM!!'
    }),
    onClick: 'alert("Works EVEN JS");'
  });

  $('body').append(newDOM);
});
.new-dom {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

只需将DOM元素的必需属性添加到构造函数对象$('<nodeName/>', {settingsObject})的第二个参数。