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.







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.
Já tinha dado uma olhada no seu Micox. Talvez algumas partes do meu estejam levemente familiares (ou não).