【发布时间】:2011-04-08 08:24:58
【问题描述】:
我一直在使用以下代码(使用 jQuery v1.4.2)根据其“文本”描述而不是“值”来设置选择列表的“选定”属性:
$("#my-Select option[text=" + myText +"]").attr("selected","selected") ;
这段代码运行良好,直到我注意到它失败的一个选择列表,这取决于正在匹配的文本。经过一番拉扯后,我意识到它仅在文本是单个单词(没有空格,没有非字母字符)的情况下才会失败。 (我之前对该代码的所有使用都适用于仅由多词化学名称组成的选择列表。)
例如,在一个选择列表中,它适用于:
邻苯二甲酸
25-D-spirosta-3,5-二烯
pogostol (#Pogostemon#)
它失败了:
葡萄糖
腺嘌呤
我尝试了任何我能想到的方法来用引号(单引号和双引号)包围文本变量,但无济于事。 (但是为什么一个单词需要引号,而两个单词的短语不需要引号呢?)
我已经尝试对其中的文本进行硬编码,结果相同。
这行得通:
$("#constituent option[text=#a#-allocryptopine]").attr('selected', 'selected');
这行得通:
$("#constituent option[text=5-O-methylrisanrinol]").attr('selected', 'selected');
这不起作用:
$("#constituent option[text=adenine]").attr('selected', 'selected');
我尝试了硬编码引号。这不起作用:
$("#constituent option[text='glucose']").attr('selected', 'selected');
我根本无法使用硬编码引号(单引号或双引号)来处理任何文本。
值得注意的是,使用 'value' 属性时可以使用引号。例如,这两个都可以正常工作:
$("#constituent option[value='3']").attr('selected', 'selected');
$("#constituent option[value=3]").attr('selected', 'selected');
下面是一些演示问题的代码。两个选择列表,第一个由简单的单词组成,第二个由两个单词短语组成。当页面加载时,它会尝试设置每个选择列表的值。 jQuery 代码适用于第二个列表,但不适用于第一个。 (我尝试在 'monkey' 中放置一个空格来获得 'mon key' 并且成功了!)
下面代码的工作演示是here。
如果我能深入了解我在这里做错了什么,我将不胜感激。甚至是使用“文本”属性的替代选择器语法。提前感谢所有有时间提供帮助的人。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript" src="../js/jquery/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var text1 = 'Monkey';
$("#mySelect1 option[text=" + text1 + "]").attr('selected', 'selected');
var text2 = 'Mushroom pie';
$("#mySelect2 option[text=" + text2 + "]").attr('selected', 'selected');
});
</script>
</head>
<body>
<select id="mySelect1">
<option></option>
<option>Banana</option>
<option>Monkey</option>
<option>Fritter</option>
</select>
<select id="mySelect2">
<option></option>
<option>Cream cheese</option>
<option>Mushroom pie</option>
<option>French toast</option>
</select>
</body>
</html>
【问题讨论】:
-
您是否有理由不能简单地设置列表的选定索引?根据文本值进行选择并不是最好的方法。
-
我明白你的意思,但我不知道当时的索引值。基本上我从数据库构建一个数据表,用户可以通过单击它来编辑一行,下面的许多选择列表都填充了表中的值(这就是我使用上面的代码的目的)。可以从一个或多个列表中选择不同的值,然后使用 $.ajax 更新数据库和表。选择列表索引值是来自数据库表的 id 值。从理论上讲,我可以将这些与文本描述一起不可见地存储在表格中,但我会尽可能减少开销。
标签: javascript jquery