使用 jQuery 解析 html 代码
Parsing html code with jQuery
我正在使用新的 material-design-lite (mdl) on my website. I'm also loading in dynamic content using 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 returns element.getAttribute is not a function
,所以我想我只是给了错误的值 .upgradeElement()
。
我做错了什么?
这里以codepen为例:http://codepen.io/anon/pen/JdByGZ
如果您只想更新按钮,请尝试 componentHandler.upgradeElement(this, 'MaterialButton');
或 componentHandler.upgradeAllRegistered();
更新所有元素。
我将我的应用构建为一个通用容器和一组视图,使用 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();
});
};
我正在使用新的 material-design-lite (mdl) on my website. I'm also loading in dynamic content using 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 returns element.getAttribute is not a function
,所以我想我只是给了错误的值 .upgradeElement()
。
我做错了什么?
这里以codepen为例:http://codepen.io/anon/pen/JdByGZ
如果您只想更新按钮,请尝试 componentHandler.upgradeElement(this, 'MaterialButton');
或 componentHandler.upgradeAllRegistered();
更新所有元素。
我将我的应用构建为一个通用容器和一组视图,使用 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();
});
};