今天我使用 jsTree 的内置 cookie 来保存树中的用户导航。
在树中单击节点时,用户将被重定向到我网站中的相应页面,并且由于 jsTree cookie 集成而选择/突出显示了单击的节点。
现在,我还想基于网站之间的导航来选择/突出显示树中的节点,即网站中的链接也可能是树中的节点,例如,也出现的行网格在树上。
问题是我怎样才能“手动”选择/突出显示节点,我还认为我应该知道用户从哪里到达页面,从树或站点中的其他链接。
谢谢,
今天我使用 jsTree 的内置 cookie 来保存树中的用户导航。
在树中单击节点时,用户将被重定向到我网站中的相应页面,并且由于 jsTree cookie 集成而选择/突出显示了单击的节点。
现在,我还想基于网站之间的导航来选择/突出显示树中的节点,即网站中的链接也可能是树中的节点,例如,也出现的行网格在树上。
问题是我怎样才能“手动”选择/突出显示节点,我还认为我应该知道用户从哪里到达页面,从树或站点中的其他链接。
谢谢,
我已经使用 jsTree、hashchange 事件和实际的可 SEO 的 URL 构建了一个完整的方法,所以这很容易符合你的想法,你可以扔掉你的 cookie,但不会以一种糟糕的方式。这也适用于书签和从 URL 到达,因为它查看节点然后匹配链接以选择节点。这对于 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');
});
如果您有更多问题,请随时问我。