いくつかの追加のスキーマ ベースのタグを含むレガシー ドキュメントがあります。
<td class="inputControl">
<input id="OffsetAccountsRequired_R0" type="radio" name="OffsetAccountsRequired_N" value="Y" >Yes
<tla:instruction type="unhide" value="OffSetAccountsApp1"></tla:instruction>
<tla:instruction type="jscript" value="//Irrelevant JavaScript here"></tla:instruction>
</input>
<input id="OffsetAccountsRequired_R1" type="radio" name="OffsetAccountsRequired_N" value="N">No
<tla:instruction type="hide" value="OffSetAccountsApp1~OffSetAccountsAppls1and2"></tla:instruction>
</input>
<input id="OffsetAccountsRequired_R2" type="radio" name="OffsetAccountsRequired_N" value="" checked="true" class="hiddenRadio" onclick="validate_js(this)">
<tla:instruction type="hide" value="OffSetAccountsApp1~OffSetAccountsAppls1and2"></tla:instruction>
</input>
</td>
そして、これらのタグで機能する validate_js(this) イベントによって呼び出されるいくつかの恐ろしい JavaScript:
// Calling line - in this case 'obj' is the input control 'OffsetAccountsRequired_R2'
tlaInstructions = getInstructionTags(obj, 'tla:instruction');
function getInstructionTags(inputID,tagType){
var coltla;
var coltlaArray = new Array();
tagType = tagType.toUpperCase();
var tlaFinished = false;
coltla = inputID.parentNode.childNodes;
for(var i=0;i<coltla.length;i++){
if(coltla[i].nodeName.toUpperCase() == 'INPUT' && coltla[i].id == inputID.id){
for(var j=i;j<coltla.length;j++){
if(coltla[j].nodeName.toUpperCase() == tagType){
coltlaArray[coltlaArray.length] = coltla[j];
}
if(coltla[j].nodeName.toUpperCase() == '/INPUT'){
tlaFinished = true;
break;
}
}
}
if(tlaFinished){
break;
}
}
return coltlaArray;
}
}
私の仕事は、この JavaScript を仕様に合わせて IE9 で動作するようにすることです (以前は vb6 Web ブラウザー コントロールでのみ使用されていました)。
私の限られた JavaScript スキルでわかる限り、このコードの目的は、input 要素内からすべての tla:instruction ノードを取得することです。これは、次の行を使用して行いますcoltla = inputID.parentNode.childNodes
レベルが上がってからレベルが下がるので、これは非常に奇妙に見えます。tla:instruction 要素を取得してもノードが取得されないため、これを行うと仮定しますcoltla = inputID.getElementsByTagName('tla:instruction')
。
入力コントロール内から特定の型の要素の配列を取得する簡単な方法はありますか?