【问题标题】:Parsing html code with jQuery使用 jQuery 解析 html 代码
【发布时间】:2015-07-17 13:02:36
【问题描述】:

我在我的网站上使用新的material-design-lite (mdl)。我还使用mustache.js 加载动态内容。

现在,需要使用 upgradeElement 函数注册新创建的元素,以便 mdl 了解它们并将 javascript 应用于它们。在他们的网站上,他们有一些 sample code 可以这样做:

<div id="container"/>
<script>
  var button = document.createElement('button');
  var textNode = document.createTextNode('Click Me!');
  button.appendChild(textNode);
  button.className = 'mdl-button mdl-js-button mdl-js-ripple-effect';
  componentHandler.upgradeElement(button);
  document.getElementById('container').appendChild(button);
</script>

但是,我使用的是 jQuery,我不完全确定应该如何解析从 mustache.js 获得的整个模板并正确注册每个组件。这是我尝试过的:

var filledTemplate = '
    <div class="mdl-card mdl-shadow--2dp">
       <div class="mdl-card__title">
           <h2 class="mdl-card__title-text">Title</h2>
       </div>
       <div class="mdl-card__supporting-text">
               <p>A simple paragraph with below some radio buttons</p>
               <p>
                   <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="input_0">
                       <input type="radio" id="input_0" class="mdl-radio__button" name="options" value="radio1" />
                       <span class="mdl-radio__label">Radio button 1</span>
                   </label>
               </p>
               <p>
                   <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="input_1">
                       <input type="radio" id="input_1" class="mdl-radio__button" name="options" value="radio2" />
                       <span class="mdl-radio__label">Radio button 2</span>
                   </label>
               </p>
       </div>
       <div class="mdl-card__actions mdl-card--border">
           <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
               Send
           </a>
       </div>
   </div>';

var html = $.parseHTML(filledTemplate);
$(html).find(".mdl-js-button").each(function(){
    componentHandler.upgradeElement($(this));
});

filledTemplate 只是为了清楚地了解它可以包含的内容。我需要绑定所有输入、文本区域、滑块、单选、复选框和一个按钮。在上面的示例中,您可以从 mdl 中看到一个简单的卡片布局,其中包含两个单选框和一个按钮。

我试图让componentHandler首先升级按钮元素,但mdl返回element.getAttribute is not a function,所以我想我只是给.upgradeElement()提供了错误的值。

我在这里做错了什么?

这里以一个codepen为例:http://codepen.io/anon/pen/JdByGZ

【问题讨论】:

    标签: javascript jquery html material-design-lite


    【解决方案1】:

    如果您只想更新按钮,请尝试componentHandler.upgradeElement(this, 'MaterialButton');,或者尝试componentHandler.upgradeAllRegistered(); 更新所有元素。

    http://jsbin.com/tuluda/4/edit?js,output

    【讨论】:

    • 告诉我你如何将回调附加到事件
    • 我不明白......上面的链接似乎工作得很好......内容在点击时附加到正文......我错过了什么吗?
    • 问题是元素没有正确注册到 mdl。单选按钮没有样式,并且按钮没有波纹。从我的问题中查看我的原始示例,看看它应该是什么样子。
    • 现在我不明白...更新了答案...这是代码jsbin.com/tuluda/4/edit?js,output
    • 非常感谢!如此简单......对不起,如果我的问题有点不清楚!
    【解决方案2】:

    我将我的应用程序构建为一个通用容器和一组视图,用 jQuery 加载并用 Hogan 渲染。我在插入模板后调用componentHandler.upgradeDom(),似乎工作正常。

    我想这可能会进一步优化,以更小的粒度进行升级,但这种简单的方法在我的 Phonegap 应用程序中运行良好。 变量 tmpl 和 content 是为了方便调试,否则代码可能会更紧凑。

    app.render = function(template, data, destination) {
      $.get(template, function(html) {
        var tmpl = Hogan.compile(html);
        var content = tmpl.render(data);
        $(destination).html(content);
        componentHandler.upgradeDom();
      });
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-30
      • 2011-11-15
      • 1970-01-01
      • 2014-12-06
      • 2019-12-28
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多