我有以下HTML / JS,用于解析DOM元素,并尝试查找丢失的元素并将其删除。但是,它说:includes()
不是函数。执行此操作时,我得到newHTML
和newHTMLO
的Object类型(newHTMLO只是一个实验变量)。我尝试了Array.from()
和Object.valueOf()
,它们都产生相同的结果。
有人可以帮助我完成这项工作吗?
var deleteLinks = $(".remove-button .remove-from-cart");
console.log("registered: " + deleteLinks.length);
deleteLinks.on('click', function(ev){
ev.preventDefault();
console.log("registered: " + deleteLinks);
var currentHTML = $('.product');
var currentText = $('.product .product-details .name-header');
var newHTML ;
var deleteIndices = [];
$.ajax({
url: this.href,
type: "GET",
dataType: "html",
success: function(data) {
newHTMLO = $(data).find('.product .product-details .name-header').map(function() { return this.innerText.toUpperCase(); });
newHTML = Object.values(newHTMLO);
for(i = 0; i < newHTML.length; i++){
console.log(i);
console.log(newHTML[i]);
console.log(typeof newHTML);
console.log(typeof newHTMLO);
if (!(newHTML.includes(currentText[i].innerText.toUpperCase()))) {
console.log("found mismatch for index " + i);
deleteIndices.push(i);
}
}
}
});
for(i = 0; i < deleteIndices.length; i++) {
console.log("removing " + deleteIndices[i]);
currentHTML[deleteIndices[i]].remove();
}
});
答案 0 :(得分:3)
我认为您遇到的问题是,您将jQuery对象数组视为常规对象数组,而事实并非如此。
更改这一行,看看是否可以解决您的问题...
newHTMLO = $(data)
.find('.product .product-details .name-header')
.toArray() // converts a jQuery object array to a regular array
.map(function() { return this.innerText.toUpperCase(); });
如果这无济于事,那么我将其删除为无关内容。
这是一个例子。 Map1是您当前的方法,而map2是修改后的版本...
var divs = $("body").find("div");
var map1 = divs.map(function(d) { return d.innerText; });
var map2 = divs.toArray().map(function(d) { return d.innerText; });
console.log("map1: " + map1)
console.log("map2: " + map2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>div #1</div>
<div>div #2</div>
<div>div #3</div>
<div>div #4</div>