Вы можете легко сделать это в других базах данных с помощью рекурсивного запроса (YMMV на производительность).
Другой способ сделать это - сохранить два дополнительных бита данных, левый и правый стоимость. Левое и правое значение получены из предварительного предпросмотра древовидной структуры, которую вы представляете.
Это известно как измененный обход дерева предзаказов и позволяет запускать простой запрос, чтобы получить все родительские значения в один раз. Он также имеет название «вложенный набор».
Так как я не уверен, что вы подобрали мою обновленную версию в HN:
var loc = window.location.href.split('?')[1].split('#')[0].split('&');
var qs = {};
$jq.each(loc, function(ix, el) {
var m = el.split('='), k = m[0], v = m[1];
qs[k] = v;
});
var args = {
pid: qs.pid, // photo ID
id: qs.id, // photo owner ID
subject: Env.user, // user ID to remove
name: '', // not checked
action: 'remove',
__a: 1,
fb_dtsg: Env.fb_dtsg,
post_form_id: Env.post_form_id,
post_form_id_source: 'AsyncRequest'
};
$jq.post('/ajax/photo_tagging_ajax.php', args);
Chickenfoot http://groups.csail.mit.edu/uid/chickenfoot/ - это плагин Firefox, который может быть альтернативой использованию консоли Firebug: вы можете писать макросы / скрипты для автоматизации повторяющихся действий. задачи в вашем браузере. Действия, которые вы кодируете, ничем не отличаются от того, что вы нажимаете, заполняете формы или что-то другое. Насколько я помню, есть интерфейс DOM для обхода HTML и т. Д.
Из DCoder , через Hacker News :
Использование Firebug, FireQuery, jQuery без конфликтов как $ jq, изнутри страницы с фотографиями ( http: // www.facebook.com/photo.php?pid=xxx&id=y):
var loc = window.location.href.match(/pid=(\d+)&id=(\d+)/);
var args = {
pid: loc[1], // photo ID
id: loc[2], // request sender id? photo owner id? not sure, haven't tested, but my user ID worked when trying to remove someone from a photo in my album
subject: loc[2], // user ID to remove
name: '', // not checked
action: 'remove',
__a: 1,
fb_dtsg: $jq('input[name="fb_dtsg"]').val(),
post_form_id: $jq('#post_form_id').val(),
post_form_id_source: 'AsyncRequest'
};
$jq.post('/ajax/photo_tagging_ajax.php', args);
Пользовательский интерфейс не обновляется. Fb_dtsg и post_form_id являются обязательными и кажутся анти-CSRF токенами. Не экспериментировали достаточно, чтобы знать, можно ли их использовать многократно.