我会尽量简短地解释它。我有一个包含 XML 数据库的 iframe 标签。在它上面有一个文本字段和一个按钮,我想在上面添加一个函数,该函数从文本字段中获取值并仅显示与输入的特定 XML 标记的查询匹配的结果。
我该怎么做呢?我知道如何获得价值,但是我必须实际只显示匹配结果的部分是我不知道该怎么做的事情。
如果有人关心,这是一个大学项目,他们只是想看看我们知道一些 JavaScript 基础知识。这是我希望看到上述情况发生的页面:
我会尽量简短地解释它。我有一个包含 XML 数据库的 iframe 标签。在它上面有一个文本字段和一个按钮,我想在上面添加一个函数,该函数从文本字段中获取值并仅显示与输入的特定 XML 标记的查询匹配的结果。
我该怎么做呢?我知道如何获得价值,但是我必须实际只显示匹配结果的部分是我不知道该怎么做的事情。
如果有人关心,这是一个大学项目,他们只是想看看我们知道一些 JavaScript 基础知识。这是我希望看到上述情况发生的页面:
在您的 iframe 中,您有一个带有处理指令的 XML,告诉浏览器应用 XSLT 样式表,该样式表将 XML 转换为带有表格的 HTML。因此,如果您要使用 Javascript 访问 iframe 的文档,您将找不到 XML 元素,而是找到 XSLT 转换的结果 HTML 文档。
基于此,我认为您有两种选择:
这两种方法都不会像在第一个选项中那样通过 HTML 搜索而在第二个 XSLT 中像以前一样通过 XML 搜索那样“搜索 XML ... 使用 JavaScript”。
至于通过 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
.
对于将 XSLT 与 Javascript 一起应用的替代方案,在 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
并忽略标题行。