【发布时间】:2013-02-24 02:30:13
【问题描述】:
我在选择具有我知道的 ID 的特定 textarea 元素时遇到问题。 最糟糕的是,我必须处理的 HTML 页面包含两个具有此 ID 的文本区域。我知道这是不对的,但我无法控制那部分。
因此,在该页面中,我有两个主要元素:<div id="left_column"> 和 <div id="right_column">,它们都包含一个元素 <textarea id="CPR_DESCRIPTION">
在 left 和 right_columns div 及其各自的 #CPR_DESCRIPTION 子文本区域之间,还有大量其他元素,它们在每一侧都相似。
我希望分别选择这两个#CPR_DESCRIPTION textarea(因为我必须将#left_column 的#CPR_DESCRIPTION 的内容添加到#right_column 的内容中)但到目前为止我所有的尝试都失败了。
我试过了:
$('#left_column textarea#CPR_DESCRIPTION');
$('#left_column, textarea#CPR_DESCRIPTION');
$('#left_column').find('textarea#CPR_DESCRIPTION');
值得注意的是,我设法将#left_column 检索为一个div,但是在检索#CPR_DESCRIPTION 时,没有成功。另请注意,#CPR_DESCRIPTION 不是 #left_column 的直接子代。
这是所要求的 HTML 的相关部分(为可怕的东西做好准备):
<div id="left_column">
<div id="property">
<div class="body>
<div class="inner">
<iframe id="property">
<html>
<body class="dialog">
<div id="G360Layout">
<form id="fieldsForm">
<div id="mainContainer">
<div id="container_2">
<div id="fields_container">
<div id="container_Description">
<div id="component_188">
<table>
<tbody>
<tr>
<td>
<textarea id="CPR_DESCRIPTION" name="CPR_DESCRIPTION">
egeezezez
</textarea>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</body>
</html>
</iframe>
</div>
</div>
</div>
</div>
所以这是我必须处理的怪物,你可以看到已经有重复的 ID,最糟糕的是 #right_column 完全一样。
这是我的 jQuery:
function doOnLoadLayoutDescription() {
alert("inside doOnLoadLayoutDescription");
var leftColumn = $('#left_column');
//alert("leftColumn.length="+leftColumn.length);
//var description = $('textarea#CPR_DESCRIPTION');
//var description = leftColumn.find('textarea#CPR_DESCRIPTION');
var description = $('#left_column').find('textarea[id=CPR_DESCRIPTION]');
alert("description.length="+description.length);
if(description.val()) {
alert("inside description.val()");
var text = description.val();
alert(text);
var rightColumn = $('#right_column');
var readOnlyDescription = rightColumn .find('textarea#CPR_DESCRIPTION');
if (readOnlyDescription.length) {
alert("inside readOnlyDescription.length");
readOnlyDescription.val(text);
alert("switch done");
}
}
alert("ouside doOnLoadLayoutDescription");
}
注意:我稍微改变了问题,因为我说它是一个 div 但它是一个 textarea,即使没有太大变化,现在纠正这个问题可能是个好主意。
注意 2:此 HTML 页面是从一个 .jsp 页面生成的,该页面是称为 Case360 的案例管理系统的一部分,该系统并不为人所知。由于 .jsp 的所有内容都是通过拖放式布局构建器生成的,因此它解释了为什么这个 HTML 几乎无法舒适地阅读。
编辑 我想我发现了问题: 我在那里放弃的脚本实际上被包裹在 iframe 元素内,因此只在该框架内搜索,因此找不到我的 #left_column 元素。我已经尝试将它放在 iframe 之外,以获得整个页面的范围,不仅是框架,而且我的表单的调用另一个脚本的脚本现在找不到它。为了正常工作,我需要找到一种摆脱框架的方法。我现在正在努力。
有什么想法吗?
【问题讨论】:
-
您的第一个和第三个示例应该可以工作。你在这里得不到帮助,因为情况肯定有更多。
-
您能否对您的 HTML 结构 + JavaScript 的相关部分制作一个 jsfiddle,然后我们会想知道到底发生了什么。
-
您可能还遇到了 jQuery 的限制(不是错误),它只能作用于同名的单个 ID:stackoverflow.com/questions/1053882/…
-
请发布您的 HTML。
-
.find将像 fiddle 中看到的那样工作,因为具有相同标识符的元素不在同一级别,你没问题。其他原因导致此问题。我们需要准确的相关 HTML。如果同一个选择器中有多个相同的 id 元素会导致问题,而不是只返回第一个匹配项。
标签: jquery find selector frame parent-child