Ответ jQuery был довольно полезен для меня. С небольшим заводом это соответствовало моим потребностям хорошо. Надеюсь, это кому-нибудь еще поможет.
function onReady ( callback ){
var addListener = document.addEventListener || document.attachEvent,
removeListener = document.removeEventListener || document.detachEvent
eventName = document.addEventListener ? "DOMContentLoaded" : "onreadystatechange"
addListener.call(document, eventName, function(){
removeListener( eventName, arguments.callee, false )
callback()
}, false )
}
Используйте фильтр атрибутов, в частности фильтр attributeEquals :
$("node[name='x']");
Чтобы выбрать все другие узлы, используйте фильтр attributeNotEquals :
$("node[name!='x']");
Затем вы можете применить jQuery манипуляции для перемещения этих узлов в другое место.
Обратите внимание, что селекторы в стиле XPath устарели в версии 1.2 и были полностью удалены в jQuery 1.3.
Если вы можете повлиять на то, что сервер отправляет, вы можете захотеть переключиться на использование JSON вместо этого, вам может быть проще анализировать.
success: function(xml) {
$(xml.find('node').each(function(){
if($(this).attr('name')=='x') {
//go to one table
} else {
//go to another table
}
}
}
Перечисления флагов можно рассматривать как простой интегральный тип, в котором каждый отдельный бит соответствует одному из отмеченных значений . Вы можете использовать это свойство, чтобы преобразовать значение перечисления с битовой флагом в массив логических значений, а затем отправить нужные вам методы из коррелированного массива делегатов.
РЕДАКТИРОВАТЬ: Мы, конечно, могли бы сделать этот код более компактным за счет использования LINQ и некоторых вспомогательных функций, но я думаю, что это легче понять в менее сложной форме. Это может быть тот случай, когда ремонтопригодность важнее элегантности.
Вот пример:
[Flags()]public enum CheckType
{
Form = 1,
QueryString = 2,
TempData = 4,
}
void PerformActions( CheckType c )
{
// array of bits set in the parameter {c}
bool[] actionMask = { false, false, false };
// array of delegates to the corresponding actions we can invoke...
Action availableActions = { DoSomething, DoSomethingElse, DoAnotherThing };
// disassemble the flags into a array of booleans
for( int i = 0; i < actionMask.Length; i++ )
actionMask[i] = (c & (1 << i)) != 0;
// for each set flag, dispatch the corresponding action method
for( int actionIndex = 0; actionIndex < actionMask.Length; actionIndex++ )
{
if( actionMask[actionIndex])
availableActions[actionIndex](); // invoke the corresponding action
}
}
В качестве альтернативы, если порядок, в котором вы оцениваете, не имеет значения, вот более простое и ясное решение, которое также работает. Если порядок имеет значение,
Вы можете использовать xpath в jQuery для выбора узлов:
$ ("//node[@name='x'ght")