Guest User

Untitled

a guest
Aug 19th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="de">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1" />
  6. <title>.</title>
  7. <script>
  8. let store = {};
  9. document.addEventListener('DOMContentLoaded', () =>
  10. {
  11. [].forEach.call(document.querySelectorAll('[data-bind]'), (el) =>
  12. {
  13. let prop = el.getAttribute('data-bind');
  14.  
  15. // dom => store
  16. el.addEventListener('input', (e) =>
  17. {
  18. store[prop] = el.value;
  19. });
  20.  
  21. // store => dom
  22. if(!store.hasOwnProperty(prop))
  23. {
  24. let value;
  25. Object.defineProperty(store, prop,
  26. {
  27. set: (newValue) =>
  28. {
  29. value = newValue;
  30. [].forEach.call(document.querySelectorAll('[data-bind]'), (element_updated) =>
  31. {
  32. if(element_updated.getAttribute('data-bind') === prop)
  33. {
  34. let tag = element_updated.tagName.toLowerCase();
  35. if( ['input','textarea','select'].indexOf(tag) > -1 )
  36. {
  37. element_updated.value = newValue;
  38. }
  39. else
  40. {
  41. element_updated.innerHTML = newValue;
  42. }
  43. }
  44. });
  45. },
  46. get: () =>
  47. {
  48. return value;
  49. },
  50. enumerable: true
  51. });
  52. }
  53.  
  54. });
  55. });
  56. </script>
  57. </head>
  58. <body>
  59.  
  60. <ul>
  61. <li><input type="text" data-bind="foo" /></li>
  62. <li><textarea data-bind="bar"></textarea></li>
  63. <li><span data-bind="foo"></span></li>
  64. <li><span data-bind="bar"></span></li>
  65. </ul>
  66.  
  67. </body>
  68. </html>
Add Comment
Please, Sign In to add comment