开发者

How to substitute text into HTML in jQuery?

开发者 https://www.devze.com 2023-01-16 10:27 出处:网络
I have a piece of template HTML that is returned from a Javascript function: function getTemplate() { return \'<li id=\"element_idx_\" class=\"elementChoice\">\' +

I have a piece of template HTML that is returned from a Javascript function:

function getTemplate() {
    return '<li id="element_idx_" class="elementChoice">' +
           '  <a href="#" onclick="_clickScript_" tabindex="27" title="_toolTip_">' + 
           '    <span id="element_idx_title">_elementDisplayText_</span>' + 
           '    <div class="elementIcon" id="element_idx_image"></div>' +
           '    <div class="actionIcon" id="element_idx_Icon"></div>' +
           '  </a>' +
           '</li>';
}

The substrings _idx_, _clickScript_, etc., are substituted using data retrieved from an AJAX call, using a function whose definition is similar to:

function interpolate(template, replacements) {
    // * template is the HTML listed above
    // * replacements is a JavaScript object, where the property names map to 
    //   the substitution strings in the HTML template.
    // 
    // E.g., { idx: 4, clickScript: function() { // click }, displayName: foo }
}

As you can see, some items are replaced multiple times within the template (i.e., _idx_).

开发者_JAVA技巧The webapp already uses jQuery extensively throughout, so I'm wondering if there's a more jQuery-esque way of achieving this, perhaps using the DOM, rather than relying on string manipulation.

Any thoughts?


Well John Resig has blogged about putting templates like that into script blocks:

<script id='template1' type='text/html'>
  <li id='element_idx' ...
    ...
  </li>
</script>

The browsers won't try to interpret those, but you can get the text:

var template = $('#template1').text();

It's a little cleaner than putting your template in the Javascript like that, but it's not without its problems. Separating the template from the code might be a little painful or awkward, depending on your setup.


There isn't since you replace those strings in places that are hard to reach with DOM operations (like element_idx_Icon).

0

精彩评论

暂无评论...
验证码 换一张
取 消