¿Cómo consigo que jQuery seleccione elementos con extensión . (punto) en su DNI?

Resuelto Doug Wilson asked hace 15 años • 8 respuestas

Dadas las siguientes clases y método de acción del controlador:

public School
{
  public Int32 ID { get; set; }
  publig String Name { get; set; }
  public Address Address { get; set; }
}

public class Address
{
  public string Street1 { get; set; }
  public string City { get; set; }
  public String ZipCode { get; set; }
  public String State { get; set; }
  public String Country { get; set; }
}

[Authorize(Roles = "SchoolEditor")]
[AcceptVerbs(HttpVerbs.Post)]
public SchoolResponse Edit(Int32 id, FormCollection form)
{
  School school = GetSchoolFromRepository(id);

  UpdateModel(school, form);

  return new SchoolResponse() { School = school };
}

Y el siguiente formulario:

<form method="post">
  School: <%= Html.TextBox("Name") %><br />
  Street: <%= Html.TextBox("Address.Street") %><br />
  City:  <%= Html.TextBox("Address.City") %><br />
  Zip Code: <%= Html.TextBox("Address.ZipCode") %><br />
  Sate: <select id="Address.State"></select><br />
  Country: <select id="Address.Country"></select><br />
</form>

Puedo actualizar tanto la instancia de la escuela como el miembro de la dirección de la escuela. ¡Esto es bastante lindo! ¡Gracias equipo de ASP.NET MVC!

Sin embargo, ¿cómo uso jQuery para seleccionar la lista desplegable y poder completarla previamente? Me doy cuenta de que podría hacer este lado del servidor, pero habrá otros elementos dinámicos en la página que afectarán la lista.

Lo siguiente es lo que tengo hasta ahora y no funciona porque los selectores no parecen coincidir con los ID:

$(function() {
  $.getJSON("/Location/GetCountryList", null, function(data) {
    $("#Address.Country").fillSelect(data);
  });
  $("#Address.Country").change(function() {
    $.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) {
      $("#Address.State").fillSelect(data);
    });
  });
});
Doug Wilson avatar Dec 09 '08 00:12 Doug Wilson
Aceptado

De Grupos de Google :

Utilice dos barras invertidas antes de cada carácter especial.

Una barra invertida en un selector jQuery escapa al siguiente carácter. Pero necesitas dos de ellos porque la barra invertida también es el carácter de escape para las cadenas de JavaScript. La primera barra invertida escapa de la segunda, lo que le proporciona una barra invertida real en su cadena, que luego escapa al siguiente carácter para jQuery.

Entonces, supongo que estás mirando

$(function() {
  $.getJSON("/Location/GetCountryList", null, function(data) {
    $("#Address\\.Country").fillSelect(data);
  });
  $("#Address\\.Country").change(function() {
    $.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) {
      $("#Address\\.State").fillSelect(data);
    });
  });
});

Consulte también ¿Cómo selecciono un elemento mediante una ID que tenga caracteres utilizados en notación CSS? en las preguntas frecuentes de jQuery.

bdukes avatar Dec 08 '2008 17:12 bdukes

No puede utilizar un selector de identificación de jQuery si la identificación contiene espacios. Utilice un selector de atributos:

$('[id=foo bar]').show();

Si es posible, especifique también el tipo de elemento:

$('div[id=foo bar]').show();
Elliot Nelson avatar Mar 20 '2009 18:03 Elliot Nelson

Escápelo para Jquery:

function escapeSelector(s){
    return s.replace( /(:|\.|\[|\])/g, "\\$1" );
}

ejemplo de uso:

e.find('option[value='+escapeSelector(val)+']')

más información aquí .

 avatar Apr 28 '2014 11:04