jQuery: Agregar dos atributos a través de .attr (); método

104

EDITAR:

Aprendí que usar otro valor que _blankNO funciona en navegadores móviles para abrir nuevas ventanas / pestañas.

Por ejemplo, si necesita abrir una nueva ventana / pestaña:

  • Esto funciona en todos los navegadores, incluso navegadores móviles: target="_blank".

  • Esto no funciona en los navegadores móviles, pero funciona en los navegadores de escritorio: target="new".

-

Aunque tengo este funcionando, no estoy seguro de si hay una mejor manera de hacerlo, o si la forma en que lo obtuve es la única o correcta.

Básicamente, lo que estoy haciendo es reemplazar todos los valores de atributo target="_new"o , de esta manera solo se abre una nueva ventana y en ella se abrirán todas las demás ventanas nuevas para no abrumar al usuario con múltiples ventanas.target="_blank"target="nw"

También estoy agregando un atributo "Se abre en una nueva ventana " title="".

Entonces, la solución que creé es esta:

$("a[target='_blank'], a[target='_new']").attr('target','nw').attr('title','Opens in a new window');

Note los dos .attr();métodos.

¿Es esta la forma correcta de agregar dos atributos a un elemento?

Lo intenté .attr('target','nw','title','Opens in a new window')pero no funcionó.

La razón por la que pregunto es por el principio DYR (Don't Repeat Yourself), así que si puedo mejorar el código que tengo, genial, si no, entonces es lo que es.

Gracias.

Ricardo Zea
fuente
@zzzzBov, sí, tienes razón, gracias por la información.
Ricardo Zea
Quería establecer dos atributos para que tuvieran el mismo valor, así que es una pena .attr('a,b','value')que no funcione. Yo también me decidí .attr('a',1).attr('b',1). Sin embargo, ser menos dependiente de las nuevas ventanas podría ser otro enfoque, en su caso, @ricardozea: P
Alastair

Respuestas:

228

Deberia trabajar:

.attr({
    target:"nw", 
    title:"Opens in a new window",
    "data-value":"internal link" // attributes which contain dash(-) should be covered in quotes.
});

Nota :

" Al establecer varios atributos, las comillas alrededor de los nombres de los atributos son opcionales.

ADVERTENCIA : ¡Al configurar el atributo 'clase', siempre debe usar comillas!

De la documentación de jQuery (septiembre de 2016) para .attr :

Si intenta cambiar el atributo de tipo en una entrada o un elemento de botón creado a través de document.createElement (), se producirá una excepción en Internet Explorer 8 o anterior.

Editar :
para referencia futura ... Para obtener un solo atributo, usaría

var strAttribute = $(".something").attr("title");

Para establecer un solo atributo, usaría

$(".something").attr("title","Test");

Para establecer varios atributos, debe envolver todo en {...}

$(".something").attr( { title:"Test", alt:"Test2" } );

Editar: si está tratando de obtener / establecer el atributo 'marcado' de una casilla de verificación ...

Deberá usarlo a prop() partir de jQuery 1.6+

el método .prop () proporciona una forma de recuperar explícitamente valores de propiedad, mientras que .attr () recupera atributos.

... el concepto más importante para recordar sobre el atributo verificado es que no corresponde a la propiedad verificada. El atributo en realidad corresponde a la propiedad defaultChecked y solo debe usarse para establecer el valor inicial de la casilla de verificación. El valor del atributo marcado no cambia con el estado de la casilla de verificación, mientras que la propiedad marcada sí

Entonces, para obtener el estado marcado de una casilla de verificación, debe usar:

$('#checkbox1').prop('checked'); // Returns true/false

O para establecer la casilla de verificación como marcada o desmarcada , debe usar:

$('#checkbox1').prop('checked', true); // To check it
$('#checkbox1').prop('checked', false); // To uncheck it
Adam Tomat
fuente
1
¡Ajá! Ok, esto es a lo que me refería. Gracias por la explicación, por eso elegí tu respuesta sobre la de Derek. Gracias Adam. PD. Aceptaré tu respuesta en 7 minutos, no me deja aceptarla ahora.
Ricardo Zea
Corrección: puede cambiar el atributo de tipo en IE si el elemento se creó recientemente y aún no se agregó a DOM.
Akash Kava
Para establecer varios atributos, debe envolver todo en {...} ... ¿No es necesario que las claves estén entre comillas?
Gcamara14
27

la forma correcta es:

.attr({target:'nw', title:'Opens in a new window'})
Derek
fuente
9

Si desea agregar atributos de arranque en la etiqueta de anclaje dinámicamente, esto lo ayudará mucho

 $(".dropdown a").attr({
      class: "dropdown-toggle",
     'data-toggle': "dropdown",
      role: "button",
     'aria-haspopup': "true",
     'aria-expanded': "true"
});
Tejas Soni
fuente
2

Algo como esto:

$(myObj).attr({"data-test-1": num1, "data-test-2": num2});
Jaydeep Patel
fuente
1

Use llaves y coloque todos los atributos que desee agregar dentro

Ejemplo:

$('#objId').attr({
    target: 'nw',
    title: 'Opens in a new window'
});
javaprodigy
fuente
0
Multiple Attribute

var tag = "tag name";
createNode(tag, target, attribute);

createNode: function(tag, target, attribute){
    var tag = jQuery("<" + tag + ">");
    jQuery.each(attribute, function(i,v){
        tag.attr(v);
    });
    target.append(tag);
    tag.appendTo(target);
}
var attribute = [
    {"data-level": "3"},
];
wonbin
fuente
Gracias por su respuesta. ¿Puede explicar su código o agregar una demostración de cómo funciona o algo así?
Ricardo Zea