2009-01-08 11 views
9

Me gustaría añadir una opción < > elemento a un selecto > elemento < donde el texto del < opción > del elemento contiene una entidad HTML: & mdash;¿Cómo creo dinámicamente un <option> en JavaScript que contiene una entidad HTML (- ... «)?

En HTML, el código se vería así:

<select name="test" id="test"> 
    <option value="">&mdash; Select One &mdash;</option> 
</select> 
código

Mi JavaScript parece a esto:

function selectOne() { 
    var e = document.getElementById('test'); 
    e.options[0] = new Option('&mdash; Select One &mdash;', ''); 
} 

Sin embargo, como se verá si se prueba esto, el & mdash; se escapó Tenía el mismo resultado cuando intenté:

e.options[o].text = '&mdash; Select One &mdash;'; 

(comportamiento observado fue en Internet Explorer 7   ... no probó con Firefox, Safari, etc. - Internet Explorer 7   es el único navegador que necesito . por el momento)

+0

¿hay alguna razón por la que deba "escapar"? –

+0

No sabía de otra manera de (fácilmente) agregar un mdash. Si fuera un simple n-dash ... usaría la tecla del tablero/menos. Creo que debería haber usado el ejemplo de tal vez un «en cambio». –

Respuesta

16

me di cuenta de que podía utilizar un escape de Unicode JavaScript:

e.options[0] = new Option('\u2014 Select One \u2014', ''); 
+0

Tanto esta solución como la solución de Chetan funcionan. Solo depende del estilo que prefieras. Para mí, prefiero establecer el valor una vez en lugar de volver atrás y cambiarlo después como en la solución de Chetan. –

6

no es necesario para escapar de la entidad - que funciona de esta manera:

function selectOne() { 
     var e = document.getElementById('test'); 
     e.options[0] = new Option('— Select One —', ''); 
} 
+0

Es cierto, pero estaba pensando en CUALQUIER entidad HTML ... como un « –

+0

Esto funciona para cualquier entidad HTML, aunque puede encontrarse con problemas de codificación. Tus secuencias de escape Unicode son probablemente la solución más portátil. –

1

text La propiedad no se desaparece, ya que debe tomarse literalmente. Si usa innerHTML, las entidades se convierten a los caracteres correspondientes.

e.options[o].innerHTML = '&mdash; Select One &mdash;'; 
Cuestiones relacionadas