jQuery:.attr();を介して2つの属性を追加します。方法


104

編集:

以外の値を使用すると_blank、モバイルブラウザーで新しいウィンドウ/タブを開くことができないことを学びました。

たとえば、新しいウィンドウ/タブを開く必要がある場合:

  • これは、モバイルブラウザーを含むすべてのブラウザーで機能しますtarget="_blank"

  • これはモバイルブラウザーでは機能しませんが、デスクトップブラウザーでは機能しますtarget="new"

-

私はこれを機能させていますが、それを行うためのより良い方法があるかどうか、またはそれを取得する方法が正しい/唯一の方法であるかどうかはわかりません。

基本的に私がやっていることは、すべてのtarget="_new"またはtarget="_blank"属性値をtarget="nw"に置き換えることです。この方法では、新しいウィンドウが1つだけ開かれ、複数のウィンドウでユーザーを圧倒しないように、他のすべての新しいウィンドウが開かれます。

新しいウィンドウで開くtitle=""属性も追加します。

だから私が作成したソリューションはこれです:

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

2つの.attr();方法に注意してください。

これは要素に2つの属性を追加する正しい方法ですか?

試しました.attr('target','nw','title','Opens in a new window')がうまくいきませんでした。

私が尋ねる理由は、DYR(Do n't Repeat Yourself)の原則によるものです。ですから、私が持っているコードを改善できれば、そうでなければ、それがそうです。

ありがとう。


@zzzzBov、はい、そうです、情報ありがとうございます。
Ricardo Zea 2012年

同じ値を持つように2つの属性を設定したかったので、残念ながら.attr('a,b','value')機能しません。私.attr('a',1).attr('b',1)も同様に解決しました。新しいウィンドウへの依存度を下げることは別のアプローチかもしれませんが、あなたの場合、@ ricardozea:P
Alastair

回答:


228

うまくいくはずです:

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

" 複数の属性を設定する場合、属性名を囲む引用符はオプションです。

警告: 'class'属性を設定するときは、常に引用符を使用する必要があります。

.attrのjQueryドキュメント(2016年9月)から:

document.createElement()を介して作成された入力またはボタン要素のtype属性を変更しようとすると、Internet Explorer 8以前では例外がスローされます。

編集
将来の参照用... 使用する単一の属性を取得するには

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

使用する単一の属性を設定するに

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

複数の属性を設定するには、すべてを{...}で囲む必要があります

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

編集-チェックボックスから「checked」属性を取得/設定しようとしている場合...

jQuery 1.6以降で使用する必要がありprop() ます

.prop()メソッドは、プロパティ値を明示的に取得する方法を提供し、.attr()メソッドは属性を取得します。

... checked属性について覚えておくべき最も重要な概念は、checkedプロパティに対応しないことです。この属性は実際にはdefaultCheckedプロパティに対応しており、チェックボックスの初期値を設定するためにのみ使用する必要があります。チェックされた属性値はチェックボックスの状態によって変化しませんが、チェックされたプロパティは変化します

したがって、チェックボックスのチェック状態取得するには、以下を使用する必要があります。

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

または、チェックボックスをオンまたはオフ設定するには、次を使用する必要があります。

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

1
ああ!わかりました、これは私が言及していたものです。説明をありがとう、それが私がデレクのものよりあなたの答えを選んだ理由です。アダムに感謝します。PS。7分後に回答を受け入れますが、今は受け入れられません。
Ricardo Zea 2012年

訂正:要素が新しく作成され、まだDOMに追加されていない場合、IEでtype属性を変更できます。
Akash Kava

複数の属性を設定するには、すべてを{...} ...で囲む必要があります。キーを引用符で囲む必要はありませんか?
Gcamara14

27

適切な方法は次のとおりです。

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

9

アンカータグにブートストラップ属性を動的に追加する場合は、これが多くの助けになります

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


1

中括弧を使用して、追加するすべての属性を中に入れます

例:

$('#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"},
];

お返事をありがとうございます。コードについて説明したり、機能するデモなどを追加したりできますか?
Ricardo Zea
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.