1

我会尽量简短地解释它。我有一个包含 XML 数据库的 iframe 标签。在它上面有一个文本字段和一个按钮,我想在上面添加一个函数,该函数从文本字段中获取值并仅显示与输入的特定 XML 标记的查询匹配的结果。

我该怎么做呢?我知道如何获得价值,但是我必须实际只显示匹配结果的部分是我不知道该怎么做的事情。

如果有人关心,这是一个大学项目,他们只是想看看我们知道一些 JavaScript 基础知识。这是我希望看到上述情况发生的页面:

http://poorlymadelolfansite.co.nf/browse.html

4

1 回答 1

1

在您的 iframe 中,您有一个带有处理指令的 XML,告诉浏览器应用 XSLT 样式表,该样式表将 XML 转换为带有表格的 HTML。因此,如果您要使用 Javascript 访问 iframe 的文档,您将找不到 XML 元素,而是找到 XSLT 转换的结果 HTML 文档。

基于此,我认为您有两种选择:

  1. 您可以保持 XSLT 不变,并在 iframe 中编写 HTML 文档脚本以隐藏不应显示的表格行。
  2. 您调整 XSLT 为要过滤的值添加一个或两个参数,然后您需要使用浏览器公开的 API 来应用带有参数集的 XSLT,并且您需要用新的转换替换 iframe 的内容结果。

这两种方法都不会像在第一个选项中那样通过 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并忽略标题行。

于 2013-06-23T09:24:03.063 回答