2

我有一个糟糕的遗留 HTML 文档,其中包含一些用于创建元数据形式的混合 XML 和一些复杂的 JavaScript 来操作所有需要升级到 IE9 的元数据。目前,我在使用包含选项元素内的一些额外 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');

如果我通过 Watch 窗口检查 DOM,那么下面唯一的元素control.options[control.selectedIndex]就是选项中的文本元素。例如“请选择”、“一个”等。

如何从所选选项中获取 tla:instruction 元素的数组/列表/集合?

更新:是否可以通过将文件作为 XML 文档打开然后从那里提取它们来提取它们?

附加背景:上面的简化片段是我公司旧 VB6 产品中用作电子表格的更大文档的一部分。它混合了 XML 和 HTML,没有架构,并且仅通过VB6 Web 浏览器控件显示。因为 Web 浏览器控件可以很好地处理格式错误的标记并且几乎忽略了 JavaScript 错误,所以设计中固有的所有问题都被允许恶化十年。

ps 请注意,我不能使用 jquery,因为旧文档是由第三方控制的。

pps在此处查看与输入控件类似的问题

4

1 回答 1

1

我没有 VB6 Web 浏览器控件可以在与您完全相同的情况下进行测试,但是在 JSFiddle 上玩一点 Firebug 给了我一些想法(但显然,它在普通浏览器中不起作用)。根据您的测试/调试环境的设置方式,首先尝试计算选项元素的子元素,以查看 Javascript 是否可以远程看到它。

所以control.options[control.selectedIndex].children.count首先尝试,如果返回 1 或更多,请尝试循环遍历 children 集合。甚至可以查看childNodes选项元素的属性以查看返回的内容。

如果这些不返回您想要的,我认为没有办法在不将 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 回答