jQuery: aggiunta di due attributi tramite .attr (); metodo


105

MODIFICARE:

Ho imparato che l'utilizzo di un valore diverso da _blank, NON funziona sui browser mobili per aprire nuove finestre / schede.

Ad esempio, se devi aprire una nuova finestra / scheda:

  • Questo funziona su tutti i browser, anche i browser mobili: target="_blank".

  • Questo non funziona sui browser mobili, ma funziona su browser desktop: target="new".

-

Anche se ho questo funzionante, non sono sicuro se ci sia un modo migliore per farlo, o se il modo in cui l'ho ottenuto è l'unico / giusto modo.

Fondamentalmente quello che sto facendo è sostituire tutti i valori di attributo target="_new"o target="_blank"a target="nw", in questo modo viene aperta solo una nuova finestra e in essa si apriranno tutte le altre nuove finestre per non sovraccaricare l'utente con più finestre.

Sto aggiungendo anche un attributo "Si apre in una nuova finestra " title="".

Quindi la soluzione che ho creato è questa:

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

Notare i due .attr();metodi.

È questo il modo corretto per aggiungere due attributi a un elemento?

Ho provato .attr('target','nw','title','Opens in a new window')ma non ha funzionato.

Il motivo per cui lo chiedo è a causa del principio DYR (Don't Repeat Yourself), quindi se posso migliorare il codice che ho, bene, se no, allora è quello che è.

Grazie.


@zzzzBov, sì, hai ragione, grazie per le informazioni.
Ricardo Zea

Volevo impostare due attributi per avere lo stesso valore, quindi è un peccato .attr('a,b','value')che non funzioni. Anch'io ho deciso .attr('a',1).attr('b',1). Essere meno dipendenti dalle nuove finestre potrebbe essere un altro approccio, nel tuo caso, però, @ricardozea: P
Alastair

Risposte:


229

Dovrebbe funzionare:

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

Nota :

" Quando si impostano più attributi, le virgolette attorno ai nomi degli attributi sono facoltative.

ATTENZIONE : quando imposti l'attributo 'class', devi sempre usare le virgolette!

Dalla documentazione di jQuery (settembre 2016) per .attr :

Il tentativo di modificare l'attributo type su un elemento di input o pulsante creato tramite document.createElement () genererà un'eccezione su Internet Explorer 8 o precedente.

Modifica :
per riferimento futuro ... Per ottenere un singolo attributo che useresti

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

Per impostare un singolo attributo useresti

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

Per impostare più attributi devi racchiudere tutto in {...}

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

Modifica: se stai tentando di ottenere / impostare l'attributo "verificato" da una casella di controllo ...

Sarà necessario utilizzare a prop() partire da jQuery 1.6+

il metodo .prop () fornisce un modo per recuperare esplicitamente i valori delle proprietà, mentre .attr () recupera gli attributi.

... il concetto più importante da ricordare sull'attributo verificato è che non corrisponde alla proprietà selezionata. L'attributo corrisponde effettivamente alla proprietà defaultChecked e deve essere utilizzato solo per impostare il valore iniziale della casella di controllo. Il valore dell'attributo verificato non cambia con lo stato della casella di controllo, mentre la proprietà selezionata lo fa

Quindi, per ottenere lo stato selezionato di una casella di controllo, dovresti usare:

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

Oppure per impostare la casella di controllo come selezionata o deselezionata dovresti utilizzare:

$('#checkbox1').prop('checked', true); // To check it
$('#checkbox1').prop('checked', false); // To uncheck it

1
Aha! Ok, questo è ciò a cui mi riferivo. Grazie per la spiegazione, ecco perché ho scelto la tua risposta rispetto a quella di Derek. Grazie Adam. PS. Accetto la tua risposta tra 7 minuti, non mi permette di accettarla adesso.
Ricardo Zea

Correzione: puoi modificare l'attributo del tipo in IE se l'elemento è stato appena creato e non è ancora stato aggiunto a DOM.
Akash Kava

Per impostare più attributi devi racchiudere tutto tra {...} ... Le chiavi non devono essere tra virgolette?
Gcamara14

27

il modo corretto è:

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

9

Se sai cosa aggiungere dinamicamente agli attributi di bootstrap nel tag di ancoraggio, questo ti aiuterà molto

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

2

Qualcosa come questo:

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

1

Usa le parentesi graffe e inserisci tutti gli attributi che desideri aggiungere all'interno

Esempio:

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

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"},
];

Grazie per la tua risposta. Puoi spiegare il tuo codice o aggiungere una demo del suo funzionamento o qualcosa del genere?
Ricardo Zea
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.