特定の文字を装飾したい4 - カスタムバインディングを使う
- <!DOCTYPE html>
- <html lang="ja">
- <head>
- <meta charset="UTF-8">
- <title>特定の文字を装飾したい4 - カスタムバインディングを使う</title>
- <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
- <script type="text/javascript" src="knockout-2.1.0beta.js"></script>
- <script type="text/javascript">
- ko.bindingHandlers.koDecoChange = {
- update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
- var value = valueAccessor();
- var valueUnwrapped = ko.utils.unwrapObservable(value);
-
- var allBindings = allBindingsAccessor();
- var koDecoWord = allBindings.koDecoWord();
-
- var repText = "";
- if (koDecoWord == "") {
- repText = value;
- }
- else {
- var strSearch = new RegExp("(" + koDecoWord + ")", "gi");
- var strReplac = '<b style="background:#ffe0ff;">' + "$1" + "</b>";
- repText = valueUnwrapped.replace(strSearch, strReplac);
- }
-
- element.innerHTML = repText;
- }
- };
-
- function viewModel() {
- var self = this;
-
- self.viewTxt = ko.observable("丸ごとシマウマ");
- self.search = ko.observable("シマウマ");
- }
-
- $(document).ready(function () {
- ko.applyBindings(new viewModel());
- });
- </script>
- <style type="text/css">
- .ko001 {
- padding:20px 10px;
- }
- .ko001 h2{
- margin:10px 0 0;
- }
- .ko001 .ko001A{
- background-color:#f6f6f6;
- border:1px solid #ccc;
- padding:20px 10px;
- margin-top:10px;
- }
- .ko001 p{
- margin:10px 0 0;
- }
- .ko001 .iptWrap{
- margin:1em 0.5em 0;
- }
- .ko001 .iptWrap dt{
- font-weight:bold;
- margin-top:5px;
- }
- .ko001 .iptWrap dd{
- padding:5px 0;
- margin:0 0 0 1em;
- }
- </style>
- </head>
- <body>
- <h1>特定の文字を装飾したい4 - カスタムバインディングを使う</h1>
- <div class="ko001">
- <h2>対象データ</h2>
- <dl class="iptWrap">
- <dt>元の文字列</dt>
- <dd><textarea data-bind="value: viewTxt" style="width:300px;height:4em;"></textarea></dd>
- <dt>置換え対象の文字列</dt>
- <dd><input type="text" data-bind="value: search" style="width:300px;" /></dd>
- </dl>
-
- <h2>「<span data-bind="text: viewTxt"></span>」の「<span data-bind="text: search"></span>」を装飾して表示</h2>
- <div data-bind="koDecoChange: viewTxt, koDecoWord: search" class="ko001A"></div>
- <p>※使用用途としては、検索結果から検索した文字列を強調表示したいとか。</p>
- </div>
- <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
- <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
- <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
- </div>
- <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
- Copyright © 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
- </div>
- </body>
- </html>