una tiene saber obtener existe elemento clase cambiar atributos atributo agregar javascript flex actionscript-3

obtener - saber si un elemento tiene una clase javascript



La mejor forma de determinar si existe un atributo XML en Flex (7)

Asumiendo que en su ejemplo event.result es un objeto XML cuyo contenido es exactamente como lo publicó, esto debería funcionar (debido a que la etiqueta Validation es la etiqueta raíz del XML):

var error:String = event.result.@Error; if (error != "") // error else // no error

El ejemplo anterior supondrá que un atributo de Error existente con un valor vacío se debe tratar como un caso "sin errores", por lo que si desea saber si el atributo existe o no, debe hacer esto:

if (event.result.hasOwnProperty("@Error")) // error else // no error

Tengo una respuesta XML de una llamada HTTPService con el formato de resultado e4x.

<?xml version="1.0" encoding="utf-8"?> <Validation Error="Invalid Username/Password Combination" />

Yo he tratado:

private function callback(event:ResultEvent):void { if(event.result..@Error) { // error attr present } else { // error attr not present } }

Esto no parece funcionar (siempre se piensa que el atributo de error se cierra) ¿cuál es la mejor manera de hacer esto? Gracias.

EDIT: también he intentado comparar el atributo con null y una cadena vacía sin tal éxito ...


Has encontrado la mejor manera de hacerlo:

event.result.attribute("Error").length() > 0

El método de attribute es la forma preferida de recuperar atributos si no sabe si están allí o no.


He encontrado una solución, todavía estoy interesado si hay una mejor manera de hacer esto ...

Esto funcionará:

private function callback(event:ResultEvent):void { if(event.result.attribute("Error").length()) { // error attr present } else { // error attr not present } }


Puede verificar esto de la siguiente manera:

if (undefined == event.result.@Error)

o dinámicamente

if (undefined == event.result.@[attributeName])

Tenga en cuenta que en su ejemplo, los dos puntos recuperarán todos los descendientes en todos los niveles, por lo que obtendrá una lista como resultado. Si no hay atributos de Error, obtendrá una lista vacía. Es por eso que nunca será igual a nulo.


Me gusta este método porque a) es dolorosamente simple yb). Ely Greenfield lo usa. ;)

if("@property" in node){//do something}


Aqui tienes:

if(event.result.@error[0]){ //exists }

Fácil, ¿eh? :)


Me gusta usar la siguiente sintaxis para verificar porque es fácil de leer, menos tipeo y está casi empatado como el método más rápido:

if ("@style" in item) // do something

Para asignarle un valor a ese atributo cuando no se conoce su nombre de antemano, use el método de 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"; }

Todas las siguientes son formas de comprobar si existe un atributo recopilado a partir de las respuestas enumeradas en esta pregunta. Como había tantos, ejecuté cada uno en 11.7.0.225 jugador de depuración. El valor a la derecha es el método utilizado. El valor de la izquierda es el tiempo más bajo en milisegundos que se tarda al ejecutar el código un millón de veces. Aquí están los resultados:

807 item.hasOwnProperty("@style") 824 "@style" in item 1756 item.@style[0] 2166 (undefined != item.@["style"]) 2431 (undefined != item["@style"]) 3050 XML(item).attribute("style").length()>0

Código de prueba de rendimiento:

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 != item.@["style"]); attExists = (undefined != item.@["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 = item.@style[0]; attExists = item.@value[0]; } var test5:int = getTimer() - time; // 1838 1756 1756 1775