如果元素有类,如何更改元素的值?

时间:2012-06-07 11:05:53

标签: jquery

如果#new_user:

,我需要更改输入的value属性
  • 将.artist-registration注册为艺术家
  • 将.team-registration注册到artist_team
  • 将.consumer-registration注册到消费者

最优雅的解决方案是什么?

提前致谢!

<form id="new_user" class="artist-registration">
<input type="hidden" value="artist" name="user[profile_attributes][role]" id="user_profile_attributes_role">
</form>

2 个答案:

答案 0 :(得分:1)

你的问题不是很清楚,但我想你是说如果表单元素有“艺术家注册”类,那么将输入元素的值设置为“artist”,对其他类名称等等?

如果您知道#new_user只会有一个类,那么就是这样的:

var val = ""; // default blank value will apply if no classes match

switch ($("#new_user").attr("class")) {
   case "artist-registration":
      val = "artist";
      break;
   case "team-registration":
      val = "artist_team";
      break;
   case "consumer-registration":
      val = "consumer";
      break;
}
$('#user_profile_attributes_role').val(val);

如果#new_user可能有多个类,那么可能:

var val = "",
    $nu = $("#new_user");

switch (true) {
   case $nu.hasClass("artist-registration"):
      val = "artist";
      break;
   case $nu.hasClass("team-registration"):
      val = "artist_team";
      break;
   case $nu.hasClass("consumer-registration"):
      val = "consumer";
      break;
}
$('#user_profile_attributes_role').val(val);

后者将根据哪个类匹配 first 来设置值,即,如果表单具有所有三个类,则“artist-registration”将优先。

答案 1 :(得分:0)

使用jQuery

var $input = $('#new_user');
$input.filter('.artist-registration').val('artist');
$input.filter('.team-registration').val('artist_team');
$input.filter('.consumer-registration').val('consumer');

第一行找到您的<input>元素。严格来说,$input是一个jQuery元素集。

在以下每一行中,filter()返回一个简化元素集,其元素与给定的CSS选择器匹配。在命名类与input元素的实际类不匹配的两种情况下,此集为空。

然后val()函数更新给定集合中每个元素的值。对于两个不匹配的调用,该集合为空,因此调用是无操作。