iT邦幫忙

2

如何挷定class去做項目區分

  • 分享至 

  • xImage

以下是我參考的codepen :https://codepen.io/mtbroomell/pen/yNwwdv

我表格上每樣產品都會有這個 +- 來控制增加減少數量,但他現在是以id 為單位,所以我有10樣產品就需要10個不同的ID 分別在html/js 都要有十個對應的ID code 這樣我覺得好沒效率~ 請問如何能使JS那邊挷我的 <span class="shop-item-title">產品名稱</span> 去做對應的+-項目

以下為單一產品時的code:

<div class="shop-items">
    <div class="shop-item">
      <span class="shop-item-title">炸排骨飯</span>
           <img class="shop-item-image" src="Images/item_1.jpg">
               <div class="shop-item-details">
                 <span class="shop-item-price">價格: 80元</span>
                      <form><div class="value-button" id="decrease" onclick="decreaseValue()" value="Decrease Value">-</div>
                        <input  class="cart-quantity-input" type="number" id="number" value="1" />
                        <div class="value-button" id="increase" onclick="increaseValue()" value="Increase Value">+</div></form>
                    <button onclick="snackbarfun()" class="btn btn-primary shop-item-button" type="button">加入購物車</button>
                    </div>
                     <div id="snackbar">成功加入購物車</div>
                </div>
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0

如果是原生JS的話。
你可以利用 getElementsByClassName 來取得。

但要注意一件事。畢竟他並非是唯一性。
所以拿到的值會是一個組合陣列。
你要再利用 for 或是 each 來處理。

alanotmt iT邦新手 4 級 ‧ 2022-07-15 11:43:06 檢舉

那可以請問一下function increaseValue() { var value = document.getElementsByClassName('A'); for (var i = 0; i < value.length; i++) { alert(value[i]); }

我看他打印的都是長這樣[object HTMLFormElement]
我要怎樣從[object HTMLFormElement] 裡拆分下面的元素?
謝謝你

qpalzm iT邦新手 1 級 ‧ 2022-07-15 11:58:52 檢舉

alanotmt 妳試試看console.log(value[i]);因為alert 看不到元素的細節,如果要看物件細項可以用console喔~

一般都是利用 console 來處理。.log 會幫你輸出到console給你查看。(請記得先按F12的DEBUG模式看)

alert 只能顯示字串值。如果是物件值的話。
就只會出現對應物件的類型而已。

這些是基本觀念。要學習進去。
這是學前端語言必學的技能。

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-07-15 12:36:41

要做購物車的話
建議參考以下兩個版本
1.Youtube 影片版
2.Bootstrap 版

0
yhosutun2490
iT邦新手 3 級 ‧ 2022-07-16 21:39:43

如果你願意嘗試新的ES6 querySelector用法的的話,可以試試~抓出來的東西類似陣列的NodeList 節點元素,瀏覽器開發者模式也能看到結構,也能用迴圈做迭代。

const title = document.**querySelectorAll**('.shop-item-title') //抓出節點元素
//如果除了排骨飯,還有其他項目(雞腿、豬腳等)會抓出同class類別的節點
console.log(title.innerHTML)  //這樣才能看內部HTML結構

//querySelectorAll不只能使用CSS選取器,也能用id篩選(改成#id)就行

你也可以嘗試在chrome瀏覽器DOM操作,會直接顯示結果
另外,如果真的想要知道網頁所有品項,那就可以使用迴圈迭代

title.forEach( (item) => {
console.log(item.innerText)
})
//會打印出所有品項
至於你說的品項操作,應該是要綁在上層 <div class="shop-item">,用選取器才能抓出整包結構,<span class="shop-item-title">炸排骨飯</span>只是其中一個封閉節點結構,
可以在JS插入模板時用迴圈加入特定id號碼管理品項,<div class="shop-item" data-id='1'>。

一起加油~我也在轉職學習中...

1
zpolice
iT邦新手 5 級 ‧ 2022-07-17 12:15:08

是「綁」定,不是「挷」

1
greenriver
iT邦研究生 5 級 ‧ 2022-07-18 09:27:39

我可能會用陣列耶

let shopItem = [
{title:'炸排骨飯',amount:0},
{title:'炸蝦排飯',amount:0},
{title:'炸魚排飯',amount:0}
]

const decreaseValue = (index)=>{
    if(shopItem[index][amount]>0) shopItem[index][amount] = shopItem[index][amount] -1
}

const increaseValue = (index)=>{
    //最多只能訂1000份
    if(shopItem[index][amount]< 1000) shopItem[index][amount] = shopItem[index][amount] +1
}

const snackbarfun = (index)=>{
    //將shopItem[index]的資料,加入購物車
}

html那邊就改成這樣

<div class="shop-items">
    <div class="shop-item">
      <span class="shop-item-title">炸排骨飯</span>
           <img class="shop-item-image" src="Images/item_1.jpg">
               <div class="shop-item-details">
                  <span class="shop-item-price">價格: 80元</span>
                  <form>
                    <div onclick="decreaseValue(0)">-</div>
                    <input type="number" value="shopItem[0][amount]" />
                    <div onclick="increaseValue(0)">+</div>
                   </form>
                   <button onclick="snackbarfun(0)" 
                   class="btn btn-primary">
                       加入購物車
                   </button>
                <div id="snackbar">成功加入購物車</div>
                </div>

我要發表回答

立即登入回答