JSTREE-現在のナビゲートURLに基づくノード選択
-
28-10-2019 - |
質問
今日、ツリー内のユーザーナビゲーションを保持するために、JSTREEの組み込みクッキーを使用しています。
ノードをクリックしてツリーをクリックすると、ユーザーは私のサイトの対応するページにリダイレクトされ、JSTREE Cookiesの統合によりクリックされたノードが選択/強調表示されます。
さて、Webサイト間のナビゲーションにも基づいてツリーのノードを選択/ハイライトしたいと思います。つまり、サイトのリンクもツリーのノードである可能性があります。たとえば、表示される行のグリッドも表示されます。木の中。
問題は、これを「手動で」ノードの選択/強調表示を行うにはどうすればよいか、また、ユーザーがページに到着した場所、ツリー、またはサイト内の他のリンクから知っておくべきだと思います。
ありがとう、
解決
私はすでにJSTREE、Hashchangeイベント、実際の実際のSEO可能なURLを使用してこれに対して完全なアプローチを構築しました。 これはまた、ノードを通して見えるURLからブックマークと到着でも動作し、リンクと一致してノードを選択します. 。 Ajaxでは、可能な場合はAjaxで最適です。
あなたがそれを理解できるようにあなたのためにこれをコメントしています。作業例はこちらです www.kitgui.com/docs それはすべてのコンテンツを示しています。
$(function () {
// used to remove double reload since hash and click are intertwined
var cancelHashChange = false,
// method sets the selector based off of URL input
setSelector = function (path) {
var startIndex = path.indexOf('/docs');
if (startIndex > -1) {
path = path.substr(startIndex);
}
path = path.replace('/docs', '').replace('/', '');
if ($.trim(path) === '') { path = 'overview'; }
return '.' + path;
};
// sets theme without the folders, plain jane
$('.doc-nav').jstree({
"themes": {
"theme": "classic",
"dots": true,
"icons": false
}
}).bind("loaded.jstree", function (event, data) {
// when loaded sets initial state based off of priority hash first OR url
if (window.location.hash) { // if hash defined then set tree state
$.jstree._focused().select_node(selector);
$(setSelector(window.location.hash.substr(1)) + ' a:first').trigger('click');
} else { // otherwise base state off of URL
$.jstree._focused().select_node(setSelector(window.location.pathname));
}
});
// all links within the content area if referring to tree will affect tree
// and jump to content instead of refreshing page
$('.doc-nav a').live('click', function (ev) {
var $ph = $('<div />'), href = $(this).attr('href');
ev.preventDefault();
cancelHashChange = true;
// sets state of hash
window.location = '#' + $(this).attr('href');
$('.doc-content').fadeOut('fast');
// jQuery magic load method gets remote content (John Resig is the man!!!)
$ph.load($(this).attr('href') + ' .doc-content', function () {
cancelHashChange = false;
$('.doc-content').fadeOut('fast', function () {
$('.doc-content').html($ph.find('.doc-content').html()).fadeIn('fast');
});
});
});
// if doc content is clicked and has referring tree content,
// affect state of tree and change tree content instead of doing link
$('.doc-content a').live('click', function (ev) {
ev.preventDefault();
if ($(this).attr('href').indexOf('docs/') > -1) {
$.jstree._focused().select_node(setSelector($(this).attr('href')));
$(setSelector($(this).attr('href')) + ' a:first').trigger('click', false);
}
});
// if back/forward are used, maintain state of tree as if it was being clicked
// refers to previously defined click event to avoid double-duty
// but requires ensuring no double loading
window.onhashchange = function () {
if (cancelHashChange) { cancelHashChange = false; return; }
$.jstree._focused().select_node(setSelector(window.location.hash.substr(1)));
$(setSelector(window.location.hash.substr(1)) + ' a:first').trigger('click', false);
};
$('#top-doc-link').closest('li').addClass('active');
});
質問がある場合はお気軽にお問い合わせください。
所属していません StackOverflow