1

複数のElementsIDの「quantity」属性を同時に取得しようとしています。

これが私が試したことです:

productMinimum : document.getElementsById("id1","id2").getAttribute("quantity")

どうすればこれを機能させることができますか?「id1」要素と「id2」要素はすべて「quantity」属性を持っています。

HTML側から見ると次のようになります。

<li class="product" name="RD-101" id="id1" price="18" quantity="2">
<li class="product" name="RD-101" id="id2" price="18" quantity="4"> 
4

7 に答える 7

3

あなたが抱えている問題は、それgetElementsById()が存在しないことです(他の場所で定義していない限り)。使用する必要getElementById()があるのは、2回ではありますが(getElementById()その名前が示すように、同じ要素が複数ある場合でも、マークアップが無効であるため、1つのid要素のみを返すため、これを行わないでください)、次に返された要素を配列にプッシュします。

var products = [];
products.push(document.getElementById("id1"));
products.push(document.getElementById("id2"));

もちろん、独自の関数を作成して、それらに基づいて複数の要素を返すこともできますid

function getElementsById(ids) {
    if (!ids) {
        return false;
    }
    else {
        var elems = [];
        for (var i = 0, len = ids.length; i < len; i++) {
            if (document.getElementById(ids[i])) {
                elems.push(document.getElementById(ids[i]));
            }
        }
        return elems;
    }
}

console.log(getElementsById(['id1','id3']));​

JSフィドルデモ

ただし、これはaではなく通常の配列を返すことnodeList注意してください(たとえば、によって返されるようにgetElementsByClassName())。また、返された配列は、単一の要素であっても、他の配列と同じ方法で繰り返す必要があります。

参照:

于 2012-05-16T15:34:06.300 に答える
1
function getQuantity(id) {
 return document.getElementById(id).getAttribute("quantity");
}

var quantId1 = getQuantity('id1');
var quantId2 = getQuantity('id2');

getElement * s *ByIdは配列を返しています。個々のアイテムを入手する必要があります。たくさんの要素がある場合は、クラスの積で選択し、それらをループして配列を作成するための単純な関数を作成できます。

于 2012-05-16T15:37:16.790 に答える
0

一度に取得できる要素は1つだけです(を使用getElementById())。数量を含む配列が必要な場合は、次を使用します。

[document.getElementById('id1').getAttribute('quantity'), document.getElementById('id2').getAttribute('quantity')]

jQueryの使用を検討してください。そこで使用でき、属性$('#id1, #id2')への簡単なアクセスをサポートしていることに加えて、属性がないdata-ため、現在実行しているのは無効なHTMLです。lipricequantity

<li class="product" name="RD-101" id="id1" data-price="18" data-quantity="2">
<li class="product" name="RD-101" id="id2" data-price="18" data-quantity="4"> 

数量配列を取得するには:

$('#id1, #id2').map(function() { return $(this).data('quantity'); }).get();
于 2012-05-16T15:33:40.627 に答える
0

のような機能はありませんgetElementsById。またはのいずれかを使用できgetElementsByClassNameますgetElementsByName

https://developer.mozilla.org/en/DOM/document.getElementsByName https://developer.mozilla.org/en/DOM/document.getElementsByClassName

getElementsByClassNameこれはかなり新しく、古いブラウザではサポートされていないことに注意してください。

于 2012-05-16T15:35:02.430 に答える
0

純粋なJavaScriptを使用して、そのための独自の関数を作成する必要があります。

function getQuantities() {
    var args = Array.prototype.slice.call(arguments);
    var quantityValue = 0;
    for(var i = 0; i < args.length; i++) {
        quantityValue += document.getElementsById(args[i]).getAttribute("quantity");
    }
    return quantityValue;
}

// your code
productMinimum : getQuantities("id1","id2")
于 2012-05-16T15:35:21.777 に答える
0

が理解しているようにdocument.getElementById一度に1つのIDを取ります

また、html5カスタムデータ属性の使用を検討してください

于 2012-05-16T15:35:31.733 に答える
0

そのようなものはありませんgetElementsById()

ただし、ありますがquerySelectorAllIE7以前ではサポートされていません。

<li>これは、ノードリストで2つを返す必要があるサンプルです。

document.querySelectorAll('#id1, #id2')
于 2012-05-16T15:38:38.673 に答える