2

メタデータのフォームを作成するために使用される混合 XML と、すべて IE9 にアップグレードする必要があるメタデータを操作するための複雑な JavaScript を含む、ひどいレガシー HTML ドキュメントがあります。現時点では、オプション要素内にいくつかの追加の XML ノードを含む選択コントロールに問題があります。

<select id="NoOfApplicants_Q" onchange="validate_js(this);doNoOfApplicantsChange();">
    <option value="" selected="true">Please select
        <tla:instruction type="jscript" value="$jointApplication = false;"></tla:instruction>
        <tla:instruction type="hide" value="App2Identity"></tla:instruction>
        <tla:instruction type="hide" value="App2Applicant"></tla:instruction>
    </option>
    <option value="1">One
        <tla:instruction type="jscript" value="$jointApplication = false;"></tla:instruction>
        <tla:instruction type="hide" value="App2Identity"></tla:instruction>
        <tla:instruction type="hide" value="App2Applicant"></tla:instruction>
    </option>
    <option value="2">Two
        <tla:instruction type="jscript" value="$jointApplication = true;"></tla:instruction>
    </option>
</select>

JavaScript を使用して tla:instruction ノードを読み取る必要があります。これにより、その後の処理を行うことができます。ただし、現在持っているコード行はノードを返しません:

instructions = control.options[control.selectedIndex].getElementsByTagName('tla:instruction');

ウォッチ ウィンドウで DOM を調べると、以下control.options[control.selectedIndex]の要素はオプション内のテキスト要素だけです。例: 「選択してください」、「1 つ」など。

選択したオプション内から tla:instruction 要素の配列/リスト/コレクションを取得するにはどうすればよいですか?

更新: ファイルを XML ドキュメントとして開き、そこから抽出することで、これらを抽出することは可能でしょうか?

追加の背景: 上記の単純化されたフラグメントは、私の会社の古い VB6 製品で電子フォームとして使用される、はるかに大きなドキュメントの一部です。スキーマなしで XML と HTML が混在しており、これまでVB6 Web ブラウザーコントロールを介してのみ表示されてきました。Web ブラウザー コントロールは、不適切な形式のマークアップに非常にうまく対処し、JavaScript エラーをほとんど無視するため、設計に内在するすべての問題が 10 年間悪化するのを許されてきました。

psレガシードキュメントはサードパーティによって管理されているため、jqueryを使用できないことに注意してください。

ppsここで入力制御に関する同様の問題を参照してください

4

1 に答える 1

1

あなたとまったく同じ状況でテストするためのVB6 Webブラウザコントロールはありませんが、Firebugを使用してJSFiddleで少し遊んでみると、いくつかのアイデアが得られました(明らかに、通常のブラウザでは機能しません)。テスト/デバッグ環境の設定方法に応じて、最初に option 要素の子を数えてみて、Javascript がリモートで参照できるかどうかを確認してください。

したがってcontrol.options[control.selectedIndex].children.count、最初に試してみて、1 つ以上が返された場合は、children コレクションをループしてみてください。おそらくchildNodes、option 要素のプロパティを見て、それが何を返すかを確認してください。

これらがあなたが望むものを返さない場合、XML を HTML に変更せずにそれを行う方法はないと思います。

HTML

<select id="NoOfApplicants_Q" onchange="getChangedValue(this)">
<option value="" selected="true">Please select
    <tla:instruction type="jscript" value="$jointApplication = false;"></tla:instruction>
    <tla:instruction type="hide" value="App2Identity"></tla:instruction>
    <tla:instruction type="hide" value="App2Applicant"></tla:instruction>
</option>
<option value="1">One
    <tla:instruction type="jscript" value="$jointApplication = false;"></tla:instruction>
    <tla:instruction type="hide" value="App2Identity"></tla:instruction>
    <tla:instruction type="hide" value="App2Applicant"></tla:instruction>
</option>
<option value="2">Two
    <tla:instruction type="jscript" value="$jointApplication = true;"></tla:instruction>
</option>

JS

window.getChangedValue = function(SelectElement)
{
    var option = SelectElement.options[SelectElement.selectedIndex];
    alert("Count of Children Elements: "+option.children.length);
}

JSFiddle

于 2013-04-22T08:57:43.350 に答える