在html select option元素中提取xml元素

时间:2013-04-19 13:38:05

标签: javascript html xml

我有一个糟糕的遗留HTML文档,其中包含一些用于创建元数据形式的混合XML和一些复杂的JavaScript来操作所有需要升级到IE9的元数据。目前我遇到了一个select控件,它在选项元素中包含一些额外的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:指令节点,以便我可以对它们进行一些后续处理。但是,我目前拥有的代码行不会返回任何节点:

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

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

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

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

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

P.S。请注意,我不能使用jquery,因为旧文档由第三方控制。

p.p.s见similar problem with input control here

1 个答案:

答案 0 :(得分:1)

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

首先尝试control.options[control.selectedIndex].children.count,如果返回1或更多,请尝试循环访问子集合。甚至可以查看option元素的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