Frequently on my debugging stage (when I need to solve something within the HTML/CSS markup that is causing some conflict) I use the CSS outline property to contour the HTML elements so as I can visually locate where the elements are positioned, if they’re collapsing, which elements are involving, etc. I use outline because it’s a property that does not modify the box model and won’t going to break more elements that are already working fine. If I use border instead, it will add 1 or 2 px to the box and can add more unnecessary problems. In addition, I use the red color not only because it’s strongly visible, but it’s fastest writing on the keyboard (lazy huh?).
Anyway, that was the introduction. I made this bookmarklet that does the job for me directly on the browser, so I don’t add dirt to my stylesheet or to the HTML file. I could use the web inspector from the browser (or Firebug) but this method is quicker. The bookmarklet asks you for which selector to draw (div is by default but it could be any selector from jQuery sentences) and the color (red is the default but it can be blue, green, #f60, etc).
I hope it can be useful for somebody else than me.
Requirement: you have to be connected to the Internet, it calls jQuery from Google API’s.
Frecuentemente en mi etapa de debugging (cuando necesito solucionar algo dentro del marcado HTML/CSS que estuviera provocando algún conflicto) utilizo la propiedad CSS outline para contornar los elementos HTML y ver dónde están ubicados, si están colapsando, qué elementos envuelve, etc. Utilizo outline porque es una propiedad que no influye en el modelo de caja y no va a hacer que se quiebren los elementos que ya sé que están correctamente posicionados. Si utilizara border le agregaría mínimo 1 ó 2 pixeles a la caja y seguro provocaría un problema más del que estoy tratando de resolver. Además, utilizo el color rojo no porque es uno de los colores más fuertes y menos comunes dentro de un layout, sino que es el más rápido de escribir (en inglés) dentro del CSS. Me acostumbré.
Enfin, esa fue la introducción. Hice un bookmarklet que hace ese trabajo por mí directo en el browser, sin tener que ensuciar mi hoja de estilos y menos el HTML. Podría utilizar el web inspector del browser (ó Firebug) pero este método es más rápido. El bookmarklet te pregunta qué selectores dibujar (por defecto es div pero puedes utilizar cualquier selector mediante las sentencias de jQuery) y además del color (por defecto es red pero puedes utilizar blue, green, #f60, etc).
Espero pueda ser útil a alguien más que a mí.
Requisito: tienes que estar conectado a Internet ya que llama a jQuery desde Google API’s.

Dando vida al tiempo / Giving life to time
This simple plugin helps you to give more life to the boring timelines. Supports horizontal and vertical layouts, and you can specify parameters for most attributes: speed, transparency, etc..
New version available, 0.9.5
<script src="js/jquery-1.6.1.min.js" type="text/javascript"></script> <script src="js/jquery.timelinr-0.9.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$().timelinr();
});
</script>
<script type="text/javascript">
$(function(){
$().timelinr({
orientation: 'horizontal',
// value: horizontal | vertical, default to horizontal
containerDiv: '#timeline',
// value: any HTML tag or #id, default to #timeline
datesDiv: '#dates',
// value: any HTML tag or #id, default to #dates
datesSelectedClass: 'selected',
// value: any class, default to selected
datesSpeed: 'normal',
// value: integer between 100 and 1000 (recommended) or 'slow', 'normal' or 'fast'; default to normal
issuesDiv : '#issues',
// value: any HTML tag or #id, default to #issues
issuesSelectedClass: 'selected',
// value: any class, default to selected
issuesSpeed: 'fast',
// value: integer between 100 and 1000 (recommended) or 'slow', 'normal' or 'fast'; default to fast
issuesTransparency: 0.2,
// value: integer between 0 and 1 (recommended), default to 0.2
issuesTransparencySpeed: 500,
// value: integer between 100 and 1000 (recommended), default to 500 (normal)
prevButton: '#prev',
// value: any HTML tag or #id, default to #prev
nextButton: '#next',
// value: any HTML tag or #id, default to #next
arrowKeys: 'false',
// value: true/false, default to false
startAt: 1,
// value: integer, default to 1 (first)
autoPlay: 'false',
// value: true | false, default to false
autoPlayDirection: 'forward',
// value: forward | backward, default to forward
autoPlayPause: 2000
// value: integer (1000 = 1 seg), default to 2000 (2segs)
});
});
</script>
HTML markup must be as follows:
<div id="timeline">
<ul id="dates">
<li><a href="#">date1</a></li>
<li><a href="#">date2</a></li>
</ul>
<ul id="issues">
<li id="date1">
<p>Lorem ipsum.</p>
</li>
<li id="date2">
<p>Lorem ipsum.</p>
</li>
</ul>
<a href="#" id="next">+</a> <!-- optional -->
<a href="#" id="prev">-</a> <!-- optional -->
</div>
Icon designed by Sebastián Cortés
Este sencillo plugin ayuda a que le des más vida y estilo a las aburridas líneas de tiempo. Soporta diagramaciones horizontales y verticales, y puedes parametrizar la mayoría de los atributos: velocidades, transparencias, etc.
Nueva versión disponible, 0.9.5
<script src="js/jquery-1.6.1.min.js" type="text/javascript"></script> <script src="js/jquery.timelinr-0.9.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$().timelinr();
});
</script>
<script type="text/javascript">
$(function(){
$().timelinr({
orientation: 'horizontal',
// valores: horizontal | vertical, por defecto horizontal
containerDiv: '#timeline',
// valores: cualquier etiqueta HTML ó #id, por defecto #timeline
datesDiv: '#dates',
// valores: cualquier etiqueta HTML ó #id, por defecto #dates
datesSelectedClass: 'selected',
// valores: cualquier clase, por defecto selected
datesSpeed: 'normal',
// valores: número entre 100 y 1000 (recomendado) ó 'slow', 'normal', 'fast', por defecto normal
issuesDiv : '#issues',
// valores: cualquier etiqueta HTML ó #id, por defecto #issues
issuesSelectedClass: 'selected',
// valores: cualquier clase, por defecto selected
issuesSpeed: 'fast',
// valores: número entre 100 y 1000 (recomendado)ó 'slow', 'normal', 'fast', por defecto fast
issuesTransparency: 0.2,
// valores: número entre 0 y 1 (recomendado), por defecto 0.2
issuesTransparencySpeed: 500,
// valores: número entre 100 y 1000 (recomendado), por defecto 500 (normal)
prevButton: '#prev',
// valores: cualquier etiqueta HTML ó #id, por defecto #prev
nextButton: '#next',
// valores: cualquier etiqueta HTML ó #id, por defecto #next
arrowKeys: 'false',
// valores: true/false, por defecto false
startAt: 1,
// valor: número entre 1 y el máximo de elementos, por defecto 1 (primero)
autoPlay: 'false',
// valor: true | false, por defecto false
autoPlayDirection: 'forward',
// valor: forward | backward, por defecto forward
autoPlayPause: 2000
// valor: número (1000 = 1 seg), por defecto 2000 (2segs)
})
});
</script>
El marcado HTML debe ser de la siguiente forma:
<div id="timeline">
<ul id="dates">
<li><a href="#">date1</a></li>
<li><a href="#">date2</a></li>
</ul>
<ul id="issues">
<li id="date1">
<p>Lorem ipsum.</p>
</li>
<li id="date2">
<p>Lorem ipsum.</p>
</li>
</ul>
<a href="#" id="next">+</a> <!-- opcional -->
<a href="#" id="prev">-</a> <!-- opcional -->
</div>
Ícono diseñado por Sebastián Cortés
Download/Bajar Plugin 0.9.5 + Demos
Copyright 2011, CSSLab.cl – Free under the MIT license.
]]>Para deshabilitar el click derecho del mouse del usuario basta la siguiente simple instrucción jQuery:
$(function(){
$(document).bind("contextmenu",function(e){
return false;
});
});
]]>$('input').each(function(){
// tomamos el valor actual del input
var currentValue = $(this).val();
// en el focus() comparamos si es el mismo por defecto, y si es asi lo vaciamos
$(this).focus(function(){
if( $(this).val() == currentValue ) {
$(this).val('');
};
});
// en el blur, si el usuario dejo el value vacio, lo volvemos a restablecer
$(this).blur(function(){
if( $(this).val() == '' ) {
$(this).val(currentValue);
};
});
});
]]>
Pero recientemente un cliente pidió que los tabs se pudieran navegar con el historial del browser, o sea que si vas seleccionado diferentes tabs e incluso saliendo a otras páginas, puedas volver a ellas con el botón ‘Back’ o ‘Volver’ del navegador, y volver a pasar por ellos. Esto me resultó en un problema no menor que me costó solucionar, ya que los tabs suelen reaccionar ante eventos del click del mouse (como por ejemplo para mostrar tal <div> al clickear tal enlace <a> y que a éste se le agregue una class="selected" que indique su estado de seleccionado). Y esto suelo no quedar registrado en el caché del browser para que pueda ser navegado como se pidió. Pero bueno, pude solucionarlo y aquí lo comparto por si lo necesitan; implica 2 pasos diferentes los cuales deben funcionar en conjunto:
Primero, crearemos una simple función en jQuery para que funcionen los tabs. Esta es una de las maneras más simples de crear este tipo de menúes. Para el HTML:
<div class="tabs"><!-- .tabs --> <ul id="menu_tabs"> <li><a href="#item1">Item 1</a></li> ... </ul> <div id="item1" class="caja"><!-- #item1 --> <h2>Item 1</h2> <p>Donec gravida posuere arcu.</p> </div><!-- /#item1 --> ...</div><!-- /.tabs -->
Le aplicamos la siguiente instrucción en jQuery:
$(function(){
// definimos variables para el contenedor y los<div>'s de los tabs
var tabContainers = $('.tabs > div');
// creamos el evento click para cada uno de los items del menu de tabs
$('div.tabs ul a').each(function() {
$(this).click(function(){
// guardamos el ancla (#item1 por ej.) en una variable del link clickeado
var hash = $(this).attr('href');
// escondemos todos los tabs
tabContainers.hide();
// mostramos el <div> que sea igual al ancla guardado
$(hash).show();
// jugamos agregando y quitando classes del menu
$('div.tabs ul a').removeClass('selected');
$('a[href='+hash+']').addClass('selected');
});
});
// para comenzar, hacemos que el primer elemento sea el clickeado
$('div.tabs ul a:first').click();
});

Bien, con esto tienes tu menú de tabs funcionando de manera básica pero práctica. Ahora como notarás, al ir por los tabs y volver con el botón del navegador éstos no seguirán el mismo recorrido devuelta, aunque en la URL sí se vea que van cambiando. Para que esto ocurra, debemos comparar no el hash del enlace (<a href="#item1"> por ej.), sino comparar con la URL que va cambiando. Además se debe incluir el plugin jQuery BBQ, el que realiza el ingreso de la URL con tabs al caché del browser. Con el mismo HTML, miren la nueva función:
$(function(){
var tabContainers = $('.tabs > div');
// creamos un nuevo evento y lo incluimos al browser
$(window).bind('hashchange', function () {
// nuestra variable no la sacamos del <a> sino de la URL y dejamos el primero seleccionado
var hash = window.location.hash || '#item1';
// el resto es prácticamente lo mismo
tabContainers.hide();
$(hash).show();
$('div.tabs ul a').removeClass('selected');
$('a[href='+hash+']').addClass('selected');
});
// ejecutamos este nuevo evento 'hashchange' mediante un trigger
$(window).trigger('hashchange');
});
En este ejemplo, incluso podemos abrir mediante la URL en el tab que queramos, por ejemplo con el siguiente link abriremos el demo en el tab 3:
]]>
Your flexible fixed layout / Tu estructura fija, flexible
Coding liquid layouts for your website can become a major problem due to many factors to be taken into when the user resizes the browser: images that doesn’t fit the width, texts wrapping as not expected, columns breaking… not to mention that working with percentages in CSS is problematic among different browsers. With a fixed layout this should not happen, because you have more control over the structure itself and the box model behaves as you expect if you use a good CSS reseter.
With jQuery browserSizr you’ll have more control over CSS styles when there is a significant change in browser size. It has 4 of the most common screens width:

Specifically, browserSizr detects the current width of your browser or it’s resize and injects a specific class when it is in the range you’ve activated. Through CSS and a bit of specificity, you can define what happens when the browser is in each resolution:
#container {
width: 960px; /* normal width */
font-size: 14px;
}
#container.lower1024 {
width: 740px; /* width for less than 1024px */
font-size: 12px; /* smaller font-size */
}
#container.over1280 {
width: 1200px; /* width for over 1280px */
font-size: 16px; /* bigger font-size */
}
<script src="jquery.js" type="text/javascript"></script> <script src="jquery.browserSizr.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$().browserSizr();
})
</script>
$().browserSizr({
containerDiv: '#container',
//containerDiv - value: any HTML tag or #id, default to #container
debug: 'off',
//debug- value: on | off, default to 'off'
smartphones: 'off',
//smartphones - value: on | off, default to 'off'
lower1024: 'on',
//lower1024 - value: on | off, default to 'on'
over1024: 'on',
//over1024 - value: on | off, default to 'on'
over1280: 'off'
//over1280 - value: on | off, default to 'off'
});
Crear estructuras líquidas para tu sitio web puede llegar a ser un gran problema debido a los muchos factores que se deben tomar en cuenta cuando el usuario escala el browser: imágenes que se pueden pasar del ancho, textos que no se cortarán como esperabas, columnas que pueden llegar a quebrarse… sin hablar de que trabajar con porcentajes es problemático entre los diferentes navegadores. Con un layout fijo esto no debería ocurrir ya que tienes más control sobra la estructura misma y el modelo de caja se comporta como esperas si haces uso de un buen reseter de estilos CSS.
Con jQuery browserSizr podrás tener más control sobre los estilos CSS cuando existe una variación significativa la dimensión del browser: en cuántos pixeles quedaría el tamaño de la tipografía del menú a 1280x1024px, o que las imágenes queden a 80% de su tamaño en resoluciones de 800x600px por ejemplo. Tienes los 4 anchos de pantallas más comunes:

En específico, browserSizr detecta el actual ancho del navegador ó su redimensionado e inyecta una class específica cuando se encuentra en el rango que hayas activado. A través de CSS y un poco de especificidad, puedes definir qué quieres que ocurra cuando el browser se encuentre en cada resolución:
#container {
width: 960px; /* ancho normal del sitio web */
font-size: 14px;
}
#container.lower1024 {
width: 740px; /* ancho para resoluciones menores que 1024px */
font-size: 12px; /* menor tamaño de fuente */
}
#container.over1280 {
width: 1200px; /* ancho para resoluciones mayores que 1280px */
font-size: 16px; /* mayor tamaño de fuente */
}
<script src="jquery.js" type="text/javascript"></script> <script src="jquery.browserSizr.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$().browserSizr();
})
</script>
$().browserSizr({
containerDiv: '#container',
//containerDiv - id o etiqueta donde se inyectará la class
debug: 'off',
//debug - ventana debug on | off, por defecto off
smartphones: 'off',
//smartphones - valores: on | off, por defecto 'off'
lower1024: 'on',
// valores: on | off, por defecto 'on'
over1024: 'on',
//over1024 - valores: on | off, por defecto 'on'
over1280: 'off'
//over1280 - valores: on | off, por defecto 'off'
});
Bajar/Download plugin (.zip 1kb)
Bajar/Download plugin+demos (.zip 22kb)
browserSizr logo by toledopasarin
Little extension as Jorge Sousa required, now it detects just the height of the browser window within 2 values: less than 600px and over 600px.
Pequeña extensión como solicitada por Jorge Sousa, donde ahora detecta sólo el alto de la ventana dentro de 2 rangos: menor que 600px y mayor a 600px.
]]>
Una nueva manera de mostrar más información / A new way to show more info
Con jQuery Blox puedes desplegar información de una manera diferente, y con una fácil y rápida configuración. Basta con que armes tu HTML siguiendo un simple patrón de bloques, y definirle al plugin los nombres de los elementos que estás construyendo (o mantener los pre-configurados); Blox se encarga de crear una mayor interacción de tu información hacia el usuario.
Blox ofrece 3 estados:

El uso de Blox no debería limitar la creatividad de quien la vaya a usar, pero es necesario conocer y mantener ciertas reglas para su correcto y total funcionamiento, principalmente de estructura HTML y de estilos CSS:
Primero necesitas una caja que contenga las demás cajas; por defecto Blox la define con el id blox. Esta caja contenedora #blox es la que soportará a las demás cajas, las que Blox denomina por defecto con una class blox_content. Esta caja .blox_content es la que tiene 2 importantes funciones: soporta al contenido que estará oculto en el primer estado, y a una tercera caja llamada .blox_box que es la gatillante de toda la interacción de Blox.
El HTML básicamente debe ser como la siguiente estructura:
<div id="blox"> /* un contenedor */ <div class="blox_content" id="box_1"> /* varias cajas de contenido */ <div class="blox_box"> /* caja que soporta el click */ Box 1 </div> Contenido desplegado cuando Box 1 es clickeado.<a href="#" class="blox_close">Cerrar Bloque</a> /* contenido oculto pero que se muestra al click en la caja anterior */ </div> /* otras cajas con el mismo patron */ </div>
La magia está en el uso de posición absoluta para que las cajas se muevan con libertad y fluidez. Para que las cajas se comporten así, deben tener un estilo específico. La que contiene a todas las cajas, #blox, debe tener un alto fijo, un ancho fijo y posición relativa ya que será quien soporte a las cajas menores .blox_content, las que tienen posición absoluta, alto fijo y ancho fijo. Cada una de las cajas .blox_content, deberían tener ubicaciones diferentes mediante id único, respecto a #blox utilizando las propiedades left y top.
La tercera caja .blox_box también debería tener un ancho y alto fijo, seguramente el mismo que su caja padre .blox_content, y para el resto de los elementos tienes libertad total de hacer lo que quieras con su estilo.
Finalmente, el CSS básico es el siguiente:
#blox {
width: 400px;
height: 400px;
position: relative;
}
.blox_content {
width: 200px;
height: 400px;
position: absolute;
}
#box_1 {
top: 0;
left: 0;
}
#box_2 {
top: 0;
left: 200px;
}
/* asi con cada una de las otras cajas */
.blox_box {
width: 200px;
height: 400px;
}

Por defecto Blox viene pre-configurado de fábrica, y su programación permite que alteres los siguientes parámetros:
Para utilizarlo con estos valores por defecto, sólo debes seguir 2 pasos básicos:
<script src="jquery-1.3.1.min.js" type="text/javascript"></script> <script src="jqueryblox-v0.9.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$().blox();
});
</script>
Si quieres configurarlo según tus necesidades, basta ir modificando los parámetros como te sean necesarios:
<script type="text/javascript">
$(function(){
$().blox({
container: '#contenedor_blox',
close: '.boton_cierra',
direction: 'righty',
fadein: 0.6
});
});
</script>
With jQuery Blox you can display information on a whole new way with a quick and easy setup. Just write yout HTML in a simple block pattern, and tell the plugin your element names (or maintain the pre-configured ones); Blox will display your information with a new interaction for your user.
Blox offers 3 states:

Using Blox should not limit the creativity of who will use it, but it needs to maintain certain rules for their correct and full operation, mainly HTML strucuture and CSS styles:
First you’ll need a box containing all other boxes, by default Blox calls it with the id blox. This container #blox will support all the blocks which Blox names with the class box_content. This block .box_content have 2 major functions: support the content hidden in the first state, and contains a third block called with the class .blox_box which is the one that fires the Blox interaction, expanding and moving the boxes to display the hidden information.
The HTML should be basically as follows:
<div id="blox"> /* a container */ <div class="blox_content" id="box_1"> /* many content blocks */ <div class="blox_box"> /* box that fires the interaction */ Box 1 </div> Content displayed when Box 1 is clicked, above Box 2.<a href="#" class="blox_close">Close Box</a> /* hidden content displayed at .blox_box click */ </div> /* other boxes with the same pattern */ </div>
The magic is in the use of absolutely positioned blocks to move them freely and smoothly For the blocks to behave like we want, they must have a specific style. The box that contains all other blocks #blox must have fixed height and width and relative position to support the smaller boxes named .blox_content which must have fixed height and width as well but absolute positioned. Each one of this boxes .blox_content should have different placements, givven through an unique #id using the properties left and top.
The third box .blox_box should also have a fixed width and height, probably the same as its parent .blox_content. For the rest of the elements you have total freedom to do whatever you want with their style.
Finally, the basic CSS is as follows:
#blox {
width: 400px;
height: 400px;
position: relative;
}
.blox_content {
width: 200px;
height: 400px;
position: absolute;
}
#box_1 {
top: 0;
left: 0;
}
#box_2 {
top: 0;
left: 200px;
}
/* like this for each of other boxes */
.blox_box {
width: 200px;
height: 400px;
}

By default, Blox comes preconfigured from the factory, and its programming allows you to alter the following parameters:
To use it with the default values, just follow this 2 simple steps:
<script src="jquery-1.3.1.min.js" type="text/javascript"></script> <script src="jqueryblox-v0.9.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$().blox();
});
</script>
If you want to customize it to suit your needs, just change the necessary parameters:
<script type="text/javascript">
$(function(){
$().blox({
container: '#my_boxes,
close: '.closeboxes,
direction: 'righty',
fadein: 0.6
});
});
</script>
Bajar/Download plugin (.zip 1kb)
Bajar/Download plugin+demos (.zip 220kb)
Blox logo by youfeelme.biz
]]>Luego del trabajo salí a trotar y ¡ZAZ! La solución viene a mi cabeza. De vuelta la puse en práctica y decidí grabarla en un videocast, pero además de esa sencilla solución creí pertinente mostrar cómo a partir de una simple funcionalidad (o compleja, dependiendo de lo que hagan) pueden transformarla en un plugin configurable a partir de opciones, para jQuery.
Cuando creé mi primer plugin tuve bastante dificultad al no encontrar una documentación detallada, y espero con este aporte visual poner al alcance de quienes necesiten material didáctico para sus proyectos web. Hago el llamado también a que puedan compartir sus desarrollos libremente; sólo así podremos mejorar la calidad de los sitios web que vemos día a día. Como lo he hecho en otras ocasiones, pongo a disposición este mismo sitio para hacer un review y difundirlos.
Dado los problemas que tuve con ediciones anteriores, esta vez aumenté bastante la calidad y por lo tanto el peso de los archivos de video. Pongo a disposición una versión streaming (.flv, 101mb) y una para que puedan descargar y ver de la tranquilidad de donde mejor quieran (.mov, 47mb comprimido).
Sebastián, espero haber solucionado tu problema, y feliz cumpleaños.
]]>Cuando uno comienza un proyecto, se suele elegir el mejor lenguaje para su desarrollo y una de las desiciones es elegir el framework JS con que se trabajará, y casarse con éste. Ahora vengo a conocer que ésta desición no tiene que ser tan drástica, ya que jQuery incluye una funcionalidad que permite que se utilice junto con otras librerías, evitando el conflicto de interpretación entre diferentes formas de escribir javascript que conforma cada framework; en esta ocasión mostraré los diferentes usos de noConflict();
Supongamos que tenemos un simple efecto de mostrar/esconder el contenido al activar un link, lo que se llama SlideToggle. El HTML sería el siguiente:
<a href="#" class="boton">Muestra/Esconde</a>
<div class="caja">
<p>Vivamus auctor leo vel dui...</p>
</div>
En Mootools el código para hacerlo funcionar se compone de la siguiente manera:
window.addEvent('domready', function() {
new Fx.Slide('mooMuestra').hide()
$('mooEsconde').addEvent('click', function(e){
e.stop();
new Fx.Slide('mooMuestra').toggle();
});
});
Ya con jQuery, lo mismo se realiza de la siguiente manera:
$().ready(function(){
$('#jMuestra').hide();
$('#jEsconde').click(function(){
$('#jMuestra').slideToggle();
});
});
Ahora combinaremos ambos métodos en un mismo archivo, el cual estará linkeando las librerías de Mootools 1.2.0 y jQuery 1.3.1, y se realizará SlideToggle cada una con su método. Para eso, se cambiará la manera con el cual jQuery llama a sus selectores (que es una de las principales razones de conflicto; el uso resumido con $). Primero, se linkea el framework de jQuery y luego el de Mootools. Se escriben los eventos con los cuales se realizan los SlideToggle, pero con un leve cambio en jQuery. En vez de utilizar:
$('selector').slideToggle();
se cambiará a:
jQuery.noConflict();
jQuery('selector').slideToggle();
Esto se repetirá con cada selector en que antes utilizábamos $. Finalmente reciclando el mismo código mostrado anteriormente, quedaría:
jQuery.noConflict();
jQuery().ready(function(){
jQuery('#jMuestra').hide();
jQuery('#jEsconde').click(function(){
jQuery('#jMuestra').slideToggle();
});
});
Ver ejemplo integrando jQuery+Mootools
Otra manera es creando una variable con una nueva manera de escribir $, por ejemplo, $jQ:
var $jQ = jQuery.noConflict();
$jQ().ready(function(){
$jQ('#jMuestra').hide();
$jQ('#jEsconde').click(function(){
$jQ('#jMuestra').slideToggle();
});
});
]]>Me puse a indagar por la web y encontré varias discusiones sobre qué solución es mejor que otra, y ninguna fue conclusiva. No hay solución aparente que funcione de igual manera para todos los browsers y que sea utilizada, por ejemplo, con comentarios condicionales. Básicamente me encontré con 2: una que involucra HTML pero la mejor manera de implementarlo es mediante Javascript y la segunda sencillamente con Javascript. Explicaré ambas a continuación, pero antes el HTML común que sería del tipo:
<select>
<option>Primero</option>
<option disabled="disabled">Segundo</option>
<option>Tercero</option>
</select>

Para que IE interprete la opción <option disabled="disabled">Segundo</option> como deshabilitado, debes cambiar la etiqueta <option> por <optgroup>; el problema es que <optgroup> se compone ligeramente diferente de <option> por lo que el HTML quedaría así:
<select>
<option>Primero</option>
<optgroup label="Segundo">Segundo</optgroup>
<option>Tercero</option>
</select>
Esta solución funciona perfecto en todos los browsers, por lo que puede ser hecho automáticamente mediante jQuery:
$('option:disabled').each(function(){
var texto = $(this).text();
$(this).replaceWith("<optgroup label='"+texto+"'>"+texto+"</optgroup>")
});

Como el problema es sólo de IE, prefiero encerraro en un if() que detecte el browser como podrán apreciar en el ejemplo. Además, notarán que <optgroup> tiene una leve diferencia de estilo que <option disabled="disabled"> pero que se puede subsanar fácilmente mediante CSS.
Ver solución 1 (en IE notarán)
Esta solución no es una solución en sí sino un parche para el problema: ya que IE no considera el atributo disabled, entonces cada vez que el <option disabled="disabled"> sea seleccionado por el usuario (tomando en cuenta que todos los otros browsers no dejarán que sea seleccionado) la selección será automáticamente trasladada al primer <option> del <select>, vale decir del ejemplo HTML si hago click a <optgroup label="Segundo">Segundo</optgroup>, automáticamente seré redireccionado a <option>Primero</option>. El JS:
$('option:disabled').css('color','gray');
$('select').change(function(){
checkDisabledOptions(this);
});
function checkDisabledOptions(el){
if(el.options[el.options.selectedIndex].disabled){
el.selectedIndex = 0;
}
}
Esta solución es una mezcla entre jQuery y Javascript puro, tomada de la mejor implementación encontrada de entre 20 otras vistas; es la más simple y con menos líneas de código. Además, para esta solución es bueno siempre en el primero item del <select> la opción <option>Seleccione</option> o cualquiera que sea que no tenga un value válido (value=""), así aportamos a la accesibilidad y podremos validar ese ítem de formulario.
Ver solución 2 (en IE notarán)
Espero Rodrigo te haya servido, y gracias por hacer me ver este tema; me entretuve bastante resolviéndolo.