我選擇 area_enInfantry 的所有子 div 并回圈調整某些子div 的文本。cardArray 是一個全域常量,而 myId 是在父函式中定義的。
未捕獲的型別錯誤:無法讀取未定義的屬性(讀取“getAttribute”)
var field = $("#area_en" cardArray[myId]['type']).find("div");
field.each(function(a, element) {
console.log("cC type:" cardArray[myId]['type'] "- index:" a " title: " element[a].attr('title'));
if (element[a].attr("title").indexOf("player") < 0) { // check this card isn't special player card
doStuff;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="area_enInfantry">
<div id="info_enInfantryScore" class="info_Score">-1</div>
<div class="encardContainer" title="barricade">-1</div>
<div class="encardContainer" title="spy">2</div>
</div>
我在這篇文章中讀到,這可能是因為欄位/元素的內容可能是 DOM 元素,我應該將它們包裝在 $() 中,所以我正是這樣做的 - 將兩個變數都更改為 $(element)[a].attr( 'title') 但現在我得到 Uncaught TypeError: Cannot read properties of undefined (reading 'indexOf') 相反,似乎將錯誤移到下一行。
我在這里做錯了什么?
uj5u.com熱心網友回復:
這里有幾個問題。首先變數element包含一個 Element 物件,而不是一個 jQuery 物件,所以沒有attr()可用的方法。
其次,一旦你糾正了這一點,attr('title')第一個div就不是這樣設定的undefined。因此你會得到一個錯誤,因為你正在呼叫indexOf()一個空值。如果為空,您可以通過將值合并為空字串來解決此問題。
另請注意,我假設您想呼叫該doStuff()函式,因此需要()在末尾添加 ,并且最好盡可能使用prop()over attr()。
話雖如此,試試這個:
// mock data
let myId = 'foo';
let cardArray = { foo: { type: 'Infantry' } }
let doStuff = () => console.log('do stuff...');
var $field = $("#area_en" cardArray[myId]['type']).find("div");
$field.each(function(i, element) {
let $el = $(element);
console.log("cC type:" cardArray[myId]['type'] "- index:" i " title: " $el.prop('title'));
if (($el.prop("title") || '').indexOf("player") < 0) { // check this card isn't special player card
doStuff();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="area_enInfantry">
<div id="info_enInfantryScore" class="info_Score">-1</div>
<div class="encardContainer" title="barricade">-1</div>
<div class="encardContainer" title="spy">2</div>
</div>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/363215.html
標籤:javascript 查询 每个 属性
