我会尝试尽可能简短地解释它。我有一个包含XML数据库的iframe标记。在它上面有一个文本字段和一个按钮,我想在其中添加一个函数,该函数从文本字段中获取值,并仅显示与特定XML标记的输入查询匹配的结果。
我该怎么做呢?我知道如何获得价值,但我必须实际显示匹配结果的部分是我不知道该怎么做。
如果有人关心,这是一个大学项目,他们只是想看到我们了解一些JavaScript基础知识。这是我希望看到上述内容的页面:
答案 0 :(得分:1)
在iframe中,您有一个带有处理指令的XML,告诉浏览器应用XSLT样式表,该样式表使用表将XML转换为HTML。因此,如果您使用Javascript访问iframe的文档,则无法找到XML元素,而是XSLT转换的结果HTML文档。
基于此,我认为您有两种选择:
这两种方法都没有“通过XML搜索......使用JavaScript”,因为在第一个选项中您将搜索HTML,而在第二个XSLT中将搜索XML,就像之前一样。
至于通过Javascript访问iframe的文档,请使用
var iframeDoc = window.frames.dsoChamps.document;
然后使用
访问该表var table = iframeDoc.getElementsByTagName('table')[0];
然后您可以搜索table.rows
集合以检查table.rows[i].cells[j].textContent
是否具有您想要的值。您可以通过设置table.rows[i].style.display = 'none';
隐藏一行,再次显示它,您只需设置table.rows[i].style.display = '';
即可。作为替代方案,您可以简单地定义一个CSS类并设置要隐藏的行的className
,并将其取消设置以再次显示行。
有一点需要注意,textContent
仅在最近的IE版本中受支持,对于旧版本,您需要检查innerText
。
对于使用Javascript应用XSLT的替代方法,在Mozilla,Opera,Safari,Chrome中,您使用相同的API https://developer.mozilla.org/en/docs/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations,但是所有IE版本都需要使用不同的API http://msdn.microsoft.com/en-us/library/windows/desktop/ms762799%28v=vs.85%29.aspx。
对于XSLT,我至少会更改它以使用thead
创建用于标题行的表,这是一个更干净的文档结构并简化您的任务以搜索行,因为您可以搜索table.tBodies[0].rows
并忽略标题行。