【问题标题】:How to Target Another Element via Javascript如何通过 Javascript 定位另一个元素
【发布时间】:2015-11-20 06:02:50
【问题描述】:

我的 jDeveloper 版本是 11.1.1.9.0

我知道通过clientListener 标签定位元素。但这只会给我一个对它被声明的元素的引用。如果我想根据在 jDeveloper 中声明的 ID 来定位页面上的另一个元素怎么办?例如:

<af:inputText label="Label 1" clientComponent="true" id="it15"> // what's declared in jDeveloper

在 HTML 中呈现为:

<input type="text" class="x25" name="r1:0:it15" id="r1:0:it15::content">

注意it15 是如何转换为r1:0:it15 的。因此,执行以下操作无法获取对该元素的引用:

document.getElementById("it15"); // returns null  
AdfPage.PAGE.findComponent("it15"); // returns undefined

这让我想到以下问题:

  1. 为什么在渲染 HTML 时 ID 会发生变化?

  2. 如果元素的 ID 被随机添加,我将如何定位该元素 字符串?

  3. 有没有办法获取随机字符串而不是硬编码 带有控件 ID?

【问题讨论】:

  • 我不确定这是否有帮助,但我在 ado.net 上遇到过类似的问题,并且有一种方法可以添加 sn-p 以获取客户端 ID。
  • 您的输入文本采用名为 r1 的形式,看起来您正在通过重复或类似的方式基于 0 创建多个 inputTexts。 Jsf 将您的字段 ID 转换为唯一的东西,以便可以找到它。
  • 这是有道理的。是的,我在表单中有更多的文本框。但是表单 id 是 f1 并且它的第一个孩子的 ID 是 r1

标签: javascript html jsf


【解决方案1】:

如果您只坚持使用直接 DOM,则可以使用查询选择器:

document.querySelector('[id$=it15]')

【讨论】:

  • 我刚刚测试过了。它正在返回对其父级的引用,即 tr 但不是元素本身
  • 哦,我明白了。我正在进行你的初步修订。我最初并没有意识到在 id 上附加了更多内容(我不熟悉您使用的框架,但听起来您可能与 AdfPage.PAGE.findComponent 很接近。您可能需要用 a 来限定它父母 ID?
  • 好吧,您使用querySelector 让我走上了正确的道路。所以谢谢你。但我希望得到推荐的方法。赞成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多