Javascript 选项标记值属性的jQuery选择器返回null

Javascript 选项标记值属性的jQuery选择器返回null,javascript,jquery,html,forms,jquery-selectors,Javascript,Jquery,Html,Forms,Jquery Selectors,我正试图用jQuery在选择下拉框中更改所选选项。我将其设置为在URL末尾找到哈希标记,并根据该哈希标记更改选择框中的选定选项 我的大部分代码都是功能性的,它成功地找到了hash标记并执行了与之对应的if语句。但是,当它转到选项的选择器(使用基于选项标记的value属性的属性选择器)时,执行语句的“then”部分时,它返回null。如果用firebug解决了这个问题,控制台中会显示选择器为空 这是我的密码: $(document).ready(function() { var $hash

我正试图用jQuery在选择下拉框中更改所选选项。我将其设置为在URL末尾找到哈希标记,并根据该哈希标记更改选择框中的选定选项

我的大部分代码都是功能性的,它成功地找到了hash标记并执行了与之对应的if语句。但是,当它转到选项的选择器(使用基于选项标记的value属性的属性选择器)时,执行语句的“then”部分时,它返回null。如果用firebug解决了这个问题,控制台中会显示选择器为空

这是我的密码:

$(document).ready(function() {
    var $hash = window.location.hash
    if($hash == "#htmlcss") {
    $('option[value="HTML/CSS Coding"]').attr("selected","selected")
    }
    if($hash == "#php") {
    $('option[value="PHP Coding"]').attr("selected","selected")
    }
    if($hash == "#jscript") {
    $('option[value="Javascript and jQuery Coding"]').attr("selected","selected")
    }
    if($hash == "#improv") {
    $('option[value="General Website Improvements"]').attr("selected","selected")
    }
    if($hash == "#towp") {
    $('option[value="Website Conversion to Wordpress"]').attr("selected","selected")
    }
    if($hash == "#wptheme") {
    $('option[value="Wordpress Theme Design"]').attr("selected","selected")
    }
    if($hash == "#complete") {
    $('option[value="Complete Website Creation"]').attr("selected","selected")
    }
    if($hash == "#server") {
    $('option[value="Web Server Configuration"]').attr("selected","selected")
    }
});

因此,为了澄清,例如,当我输入一个以#php散列标记结尾的url时,所需的操作不会发生,这将通过使用“selected”html属性将“php Coding”选项更改为selected选项,但是特定选项标记的选择器返回null。我的语法有问题吗?或者我的代码没有按照我认为应该的方式运行?非常感谢。

您不应该在值选择器中使用引号,而且我认为您可能需要转义斜杠,即:

$('option[value=HTML\\/CSS Coding]').attr("selected","selected")

有关更多信息,请参见

您可以缩小它的尺寸,同时解决选择器问题,只需如下使用:

var hashmap  = { 
  htmlcss: "HTML/CSS Coding",
  php: "PHP Coding",
  jscript: "Javascript and jQuery Coding",
  improv: "General Website Improvements",
  towp: "Website Conversion to Wordpress",
  wptheme: "Wordpress Theme Design",
  complete: "Complete Website Creation",
  server: "Web Server Configuration"
};

$(function() {
    var $hash = window.location.hash.replace('#','');
    $("#IDOfSelectElement").val(hashmap[$hash]);
});

这种方法使用设置
(通过ID查找)上的值,选择值与传入值匹配的
,这也解决了转义问题。但是,我不确定您拥有的值是否是实际的
value=”“
部分,它们看起来像
的文本……请确保您使用的是
value=“
部分。另一个优化是使用对象映射使其更易于维护:)

可能只需在
if
语句之前添加此代码:

$('option').removeAttr('selected');

虽然知道如果页面上有多个
select
,则会影响所有选项。

为什么不为每个select选项分配id?这将使您的代码更整洁

$(document).ready(function() {
   $(window.location.hash).attr("selected","selected");
});

您确定这些是值,而不是
元素的文本吗?还有,
的名字是什么,有一种更简单的方法:)我打算用一个非常类似的注释来回答。。。尼克完全正确。我还要补充一点,在选择框中设置所选选项时,使用.val()是唯一有效的方法。这非常有效!非常感谢你。我从来没有想过使用这种方法,它更优雅,紧凑,最重要的是,功能!我想我需要进一步研究jQueryAPI。再次感谢你,尼克!