Я хотел бы использовать следующий синтаксис, чтобы проверить, потому что это легко читать, меньше печатать и почти привязали как самый быстрый метод:
if ("@style" in item) // do something
Чтобы присвоить значение обратно в этот атрибут, когда дон «знаю имя его, прежде чем руки использовать attribute
метод:
var attributeName:String = "style";
var attributeWithAtSign:String = "@" + attributeName;
var item:XML = <item style="value"/>;
var itemNoAttribute:XML = <item />;
if (attributeWithAtSign in itemNoAttribute) {
trace("should not be here if attribute is not on the xml");
}
else {
trace(attributeName + " not found in " + itemNoAttribute);
}
if (attributeWithAtSign in item) {
item.attribute(attributeName)[0] = "a new value";
}
Все следующие способы, чтобы проверить, если атрибут существует, собранная из ответов, перечисленных на этом Ques Тион. Так как было так много, я побежал каждый в отладочном проигрывателе 11.7.0.225. Значение справа - используемый метод. Значение слева - это самое низкое время в миллисекундах, которое требуется при запуске кода один миллион раз. Вот результаты:
807 item.hasOwnProperty("@style")
824 "@style" in item
1756 [email protected][0]
2166 (undefined != [email protected]["style"])
2431 (undefined != item["@style"])
3050 XML(item).attribute("style").length()>0
Performance Код проверки:
var item:XML = <item value="value"/>;
var attExists:Boolean;
var million:int = 1000000;
var time:int = getTimer();
for (var j:int;j<million;j++) {
attExists = XML(item).attribute("style").length()>0;
attExists = XML(item).attribute("value").length()>0;
}
var test1:int = getTimer() - time; // 3242 3050 3759 3075
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = "@style" in item;
attExists = "@value" in item;
}
var test2:int = getTimer() - time; // 1089 852 991 824
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = (undefined != [email protected]["style"]);
attExists = (undefined != [email protected]["value"]);
}
var test3:int = getTimer() - time; // 2371 2413 2790 2166
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = (undefined != item["@style"]);
attExists = (undefined != item["@value"]);
}
var test3_1:int = getTimer() - time; // 2662 3287 2941 2431
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = item.hasOwnProperty("@style");
attExists = item.hasOwnProperty("@value");
}
var test4:int = getTimer() - time; // 900 946 960 807
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = [email protected][0];
attExists = [email protected][0];
}
var test5:int = getTimer() - time; // 1838 1756 1756 1775
Проверьте свой ответ в конце. Я считаю, что это то, что вы искали! :) – Rihards 2010-10-25 22:08:48