Foros del Web » Programando para Internet » Javascript »

prototype de un objeto HTML

Estas en el tema de prototype de un objeto HTML en el foro de Javascript en Foros del Web. Hola. Pues quería hacer algo así, pero que funcione en IE. La idea es cambiar la propiedad color del style de la capa con un ...
  #1 (permalink)  
Antiguo 30/08/2007, 07:24
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
prototype de un objeto HTML

Hola.

Pues quería hacer algo así, pero que funcione en IE. La idea es cambiar la propiedad color del style de la capa con un método suyo.
Código PHP:
<div id="capa">Hola!</div>

<
script type="text/javascript">
var 
tipoDIVs document.createElement("DIV").constructor;
var 
functionSetColor = function(col) {
    
this.style.color col;

tipoDIVs.prototype.setColor functionSetColor;

$(
"capa").setColor("red");
</script> 
En IE (IE6) el error que me da es:
Cita:
Iniciado por IE6
'tipoDIVs.prototype' es nulo o no es un objeto
Y tipoDIVs es undefined. Así que deduzco que no existe aquello de .constructor.

He probado con
Código PHP:
Object.prototype.setColor functionSetColor;
$(
"capa").prototype.setColor functionSetColor
Y ninguna de las dos ha dado resultado. La primera sí funciona pero luego no es posible utilizarla con elementos HTML, y la segunda era a la desesperada, por si colaba.


Ésto último sí funciona en los dos navegadores:
Código PHP:
$("capa").setColor functionSetColor;
$(
"capa").setColor("red"); 
Pero me gustaría algo un poco más global, para todos los DIV del documento, y no me gustaría tener que recorrerlos todos para ponerles el método éste...


¿Ideas para nuestro navegador favorito?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #2 (permalink)  
Antiguo 30/08/2007, 07:51
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: prototype de un objeto HTML

Hola:

Creo que con explorer no se puede confiar... supongo que entrecorchetando el nuevo método podría funcionar (claro que no sería con prototype... hoy has re-abierto un tema ...)

Tanto en Mozilla como en Opera, por cada tag se crea un objeto del tipo HtmlXXXElement (cambiando "XXX" por el tag en cuestión -capitalizado-)... y no estoy seguro de si las mayúsculas son así. Creo que el typeof muestra el tipo...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 30/08/2007, 08:21
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Re: prototype de un objeto HTML

loading...............

Bueno, ya de entrada no puedes hacer prototype a objetos DOM o a variables.
solo a Object,String,Array,Integer

pero sí podrías hacer

Código PHP:
tipoDIVs.setColor functionSetColor
connection closed.
__________________

Maborak Technologies
  #4 (permalink)  
Antiguo 30/08/2007, 08:37
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: prototype de un objeto HTML

@ caricatos:

Hola otra vez. ¿A qué te refieres con entrecorchetando el nuevo método?

@ MaBoRaK:

Sí, si puedo hacer eso que me comentas, pero no en IE, esa es mi duda. Directamente tipoDIVs es undefined. Si no me equivoco, .constructor es una propiedad que devuelve un [HtmlDIVElement], o lo que ha comentado caricatos (que tampoco sé escribirlo correctamente). No estoy intentando hacer prototype a un DIV directamente, sino a todos los DIVs a la vez

---------------------------------

Bueno, creo que me tendré que quedar con algo como ésto:
Código PHP:
<div id="capa1">Hola!</div>
<
div id="capa2">Qué tal!</div>
<
div id="capa3">Muy bien!</div>

<
script type="text/javascript">

// document.getElementById abreviado
function $(x) { return document.getElementById(x); }


// Definición del método
var functionSetColor = function(col) {
    
this.style.color col;


// Adjuntado del método a todos los DIVs
try {
    var 
tipoDIVs document.createElement("DIV").constructor;
    
tipoDIVS.prototype.setColor functionSetColor;
} catch(
err) {
    var 
DIVs document.getElementsByTagName("DIV");
    for(var 
i in DIVs)
        
DIVs[i].setColor functionSetColor;
}

$(
"capa1").setColor("orange");
$(
"capa2").setColor("red");
$(
"capa3").setColor("#925ff7");

</script> 

Aunque ese try & catch podría meterse en una función y reutilizarse para cualquier tipo HTML (divs, inputs...) y cualquier función que no sea sólo functionSetColor, eso luego lo haré.


A ver si se nos ocurre algo un poco más cómodo.


Gracias por responder.
Un saludo!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:41.