Статьи

Совет: создайте временное решение для JavaScript на основе шаблонов

Иногда вам не требуется высококачественное шаблонное решение , но вам все равно нужно не смешивать множество неприятного HTML-кода с вашим JavaScript. В этих случаях простая, временная система шаблонов может иметь большое значение.

Выберите 720p для лучшей наглядности.
Подпишитесь на наш канал YouTube для получения дополнительной подготовки.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<!doctype html public ‘ahh hell yeah’>
<html>
<head>
    <meta charset=utf-8>
    <title>Simple Templating</title>
</head>
<body>
   
  <div class=»result»></div>
   
  <script type=»template» id=»template»>
    <h2>
      <a href=»{{href}}»>
        {{title}}
      </a>
    </h2>
    <img src=»{{imgSrc}}» alt=»{{title}}»>
  </script>
 
</body>
</html>
1
;(function() { // simulates AJAX request var data = [ { title: «Create a Sticky Note Effect in 5 Easy Steps with CSS3 and HTML5», href: «http://net.tutsplus.com/tutorials/html-css-techniques/create-a-sticky-note-effect-in-5-easy-steps-with-css3-and-html5/», imgSrc: «https://d2o0t5hpnwv4c1.cloudfront.net/771_sticky/sticky_notes.jpg» }, { title: «Nettuts+ Quiz #8», href: «http://net.tutsplus.com/articles/quizzes/nettuts-quiz-8-abbreviations-darth-sidious-edition/», imgSrc: «https://d2o0t5hpnwv4c1.cloudfront.net/989_quiz2jquerybasics/quiz.jpg» }, { title: «WordPress Plugin Development Essentials», href: «http://net.tutsplus.com/tutorials/wordpress/wordpress-plugin-development-essentials/», imgSrc: «https://d2o0t5hpnwv4c1.cloudfront.net/1101_wpPlugins/wpplugincourse.png» } ], template = document.querySelector(‘#template’).innerHTML, result = document.querySelector(‘.result’), i = 0, len = data.length, fragment = »; for ( ; i < len; i++ ) { fragment += template .replace( /\{\{title\}\}/, d

Метод, описанный в скринкасте, является наиболее читабельным, однако, если вы предпочитаете более автоматизированный подход, мы можем динамически применять значения и регулярные выражения, например:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
;(function () {
    // simulates AJAX request
    var data = [{
        title: «Create a Sticky Note Effect in 5 Easy Steps with CSS3 and HTML5»,
        href: «http://net.tutsplus.com/tutorials/html-css-techniques/create-a-sticky-note-effect-in-5-easy-steps-with-css3-and-html5/»,
        imgSrc: «https://d2o0t5hpnwv4c1.cloudfront.net/771_sticky/sticky_notes.jpg»
    }, {
        title: «Nettuts+ Quiz #8»,
        href: «http://net.tutsplus.com/articles/quizzes/nettuts-quiz-8-abbreviations-darth-sidious-edition/»,
        imgSrc: «https://d2o0t5hpnwv4c1.cloudfront.net/989_quiz2jquerybasics/quiz.jpg»
    }, {
        title: «WordPress Plugin Development Essentials»,
        href: «http://net.tutsplus.com/tutorials/wordpress/wordpress-plugin-development-essentials/»,
        imgSrc: «https://d2o0t5hpnwv4c1.cloudfront.net/1101_wpPlugins/wpplugincourse.png»
    }],
        template = document.querySelector(‘#template’).innerHTML,
        result = document.querySelector(‘.result’),
        attachTemplateToData;
 
 
    // Accepts a template and data.
    // data, and replaces each key in the template, accordingly.
    attachTemplateToData = function(template, data) {
        var i = 0,
            len = data.length,
            fragment = »;
 
        // For each item in the object, make the necessary replacement
        function replace(obj) {
            var t, key, reg;
 
            for (key in obj) {
                reg = new RegExp(‘{{‘ + key + ‘}}’, ‘ig’);
                t = (t || template).replace(reg, obj[key]);
            }
 
            return t;
        }
 
        for (; i < len; i++) {
            fragment += replace(data[i]);
        }
 
        return fragment;
    };
 
    result.innerHTML = attachTemplateToData(template, data);
 
})();

Это метод, который я, скорее всего, буду использовать.


Если вы предпочитаете более гибкое решение, любое из следующего должно помочь!