特定の文字を装飾したい3 - カスタムバインディングを使う

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>特定の文字を装飾したい3 - カスタムバインディングを使う</title>
  6. <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
  7. <script type="text/javascript" src="knockout-2.1.0beta.js"></script>
  8. <script type="text/javascript">
  9.   ko.bindingHandlers.koDecoChange = {
  10.     update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
  11.       var value = valueAccessor();
  12.       var allBindings = allBindingsAccessor();
  13.       
  14.       // var valueUnwrapped = ko.utils.unwrapObservable(value);
  15.       var koDecoWord = allBindings.koDecoWord;
  16.       
  17.       var repText = "";
  18.       if (koDecoWord  == "") {
  19.         repText = value;
  20.       }
  21.       else {
  22.         var strSearch = new RegExp("(" + koDecoWord + ")", "gi");
  23.         var strReplac = '<b style="background:#ffe0ff;">' + "$1" + "</b>";
  24.         // repText = valueUnwrapped.replace(strSearch, strReplac);
  25.         repText = value.replace(strSearch, strReplac);
  26.       }
  27.       
  28.       element.innerHTML = repText;
  29.     }
  30.   };
  31.   
  32.   function viewModel() {
  33.     var self = this;
  34.     
  35.     self.viewTxt = ko.observable("丸ごとシマウマ");
  36.     self.search = ko.observable("シマウマ");
  37.     
  38.   }
  39.   
  40.   $(document).ready(function () {
  41.     ko.applyBindings(new viewModel());
  42.   });
  43. </script>
  44. <style type="text/css">
  45.   .ko001 {
  46.     padding:20px 10px;
  47.   }
  48.   .ko001 h2{
  49.     margin:0;
  50.   }
  51.   .ko001 .ko001A{
  52.     background-color:#f6f6f6;
  53.     border:1px solid #ccc;
  54.     padding:20px 10px;
  55.     margin-top:10px;
  56.   }
  57.   .ko001 p{
  58.     margin:10px 0 0;
  59.   }
  60. </style>
  61. </head>
  62. <body>
  63. <h1>特定の文字を装飾したい3 - カスタムバインディングを使う</h1>
  64. <div class="ko001">
  65.   <h2>「<span data-bind="text: viewTxt"></span>」の「<span data-bind="text: search"></span>」を装飾して表示</h2>
  66.   <!-- div data-bind="koDecoChange: viewTxt, koDecoWord: $root.search()" class="ko001A"></div -->
  67.   <div data-bind="koDecoChange: viewTxt(), koDecoWord: search()" class="ko001A"></div>
  68.   <p>※使用用途としては、検索結果から検索した文字列を強調表示したいとか。</p>
  69. </div>
  70. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  71. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  72. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  73. </div>
  74. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  75. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  76. </div>
  77. </body>
  78. </html>