我有一个糟糕的遗留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,因为旧文档由第三方控制。
答案 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);
}