Skip to content

Instantly share code, notes, and snippets.

@hachibeeDI
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hachibeeDI/483408f2639725b546f2 to your computer and use it in GitHub Desktop.
Save hachibeeDI/483408f2639725b546f2 to your computer and use it in GitHub Desktop.
rxjsのサンプル
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Rxデモ</title>
<style>
.hidden {
display: none;
}
</style>
</head>
<body>
<input id="query-field" type="text" name="user">
<!-- {{{ -->
<ul>
<li class="query-target">aaa</li>
<li class="query-target">bbb</li>
<li class="query-target">zzz</li>
<li class="query-target">abc</li>
</ul>
<!-- }}} -->
<!-- script -->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.5/rx.all.min.js" async></script>
<script type="text/javascript">
var _turnObjToArray = function(obj) {
return [].map.call(obj, function(element) {
return element;
})
};
var main = function main() {
var query_field = document.getElementById('query-field');
var query_targets = _turnObjToArray(document.querySelectorAll('.query-target'));
var unhideAllTargets = function unhideAllTargets() {
query_targets.map(function(node) { node.classList.remove('hidden'); });
};
var hideTarget = function hideTarget(node) { node.classList.add('hidden'); };
var query_field_observer = Rx.Observable.fromEvent(query_field, 'keyup');
query_field_observer
.map(function(e) { return e.target.value; })
.throttle(300)
.distinctUntilChanged()
.filter(function(txt) {
if (txt.length == 0) { unhideAllTargets(); }
return txt.length >= 2;
})
.subscribe(function(txt) {
var matcher = new RegExp(".*" + txt + ".*");
query_targets
.filter(function(node) { return ! node.textContent.match(matcher); })
.map(hideTarget);
});
};
window.addEventListener('load', main);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment