innerOptions

O IE6 é um dos browsers o browser mais problemático que existe, tanto para HTML e CSS quanto para JavaScript. Todos sabem disso, até aqui nada de novo.

Justamente nesse pseudo-browser é o problema que vou expor. Não sei se ele foi resolvido por muita gente, mas eu dei um jeito e funcionou bem. Quem mais tiver feito algo parecido coloque o link nos comentários.

A função é a seguinte:

function innerOptions(oSelect,mOptions) {
	var ini = 0;
	if(mOptions.toLowerCase().indexOf("<option") < 0) {
		var oOption = document.createElement('option');
		oOption.innerHTML = mOptions;
		oOption.setAttribute("value", mOptions);
		oSelect.appendChild(oOption);
    }
	else {
	    var ini = 0;
	    while (ini != -1) {
        ini = mOptions.indexOf('<option', ini);
	        if (ini >= 0) {
				var valueIni = mOptions.indexOf('value="', ini);
        	    if(valueIni >= 0) {
					var valueFim = mOptions.indexOf('"', valueIni);
    	        	var value = mOptions.substring(valueIni,valueFim);
				}
            	ini = mOptions.indexOf('>', ini) + 1;
	            var fim = mOptions.indexOf('</option>', ini);
    	        text = mOptions.substring(ini,fim);
        	    elOption = document.createElement("option");
            	elOption.innerHTML = text;
				elOption.value = value;
    	        oSelect.appendChild(elOption);
	        }
    	}
	}
}

A idéia é a seguinte: caso não haja uma tag option em mOptions, ela é criada e tem value e texto como mOptions. Caso contrário, as tags são recriadas e adicionadas ao select através de appendChild. Simples, mas chatinho de fazer, pelos indexOf (odeio isso).

Essa função é bem útil tanto para Ajax quanto para só JavaScript.

Update: aproveitem e dêem uma olhada na função do Micox também. Utiliza uma idéia diferente, mas funciona legal.

Posts Relacionados

Postado em janeiro 25, 2007 às 21:09

Comentários

  1. Micox

    Ae Julio.
    Eu tinha feito uma vez.
    O esquema do meu é jogar o innerHTML em um outro objeto (não select) e ir varrendo ele, texto por texto, atributo por atributo e ir adicionando via appendChild.

    Confere ae.


  2. JulioGreff

    Já tinha dado uma olhada no seu Micox. Talvez algumas partes do meu estejam levemente familiares (ou não).


Deixe seu comentário