【发布时间】:2018-08-21 14:55:57
【问题描述】:
简介
我为我的一个朋友编写了一个投资组合网站作为大学项目。 我开始学习 Vue.js 并开始深入研究 JavaScript。
在某些情况下,我仍在为所有新事物而苦苦挣扎。因此,我将 Vue.js 与 jQuery 和 JavaScript 混合使用。我知道这不是最佳做法。 但是在我花了很多年的时间主要是 html 和 css(有时还有一点 PHP)之后,有些东西对我来说仍然是新的。 ;)
问题
我创建了一个画廊网格(内容是通过 Vue 加载的)并且希望能够通过导航过滤内容。 因此,我遇到了以下方法: https://www.w3schools.com/howto/howto_js_filter_elements.asp
/* content filter */
filterSelection("all");
function filterSelection(c) {
var x, i;
x = document.getElementsByClassName("content-filter");
if (c == "all") c = "";
// Add the "view" class (display:block) to the filtered elements, and remove the "view" class from the elements that are not selected
for (i = 0; i < x.length; i++) {
w3RemoveClass(x[i], "view");
if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "view");
}
}
// Show filtered elements
function w3AddClass(element, name) {
var i, arr1, arr2;
arr1 = element.className.split(" ");
arr2 = name.split(" ");
for (i = 0; i < arr2.length; i++) {
if (arr1.indexOf(arr2[i]) == -1) {
element.className += " " + arr2[i];
}
}
}
// Hide elements that are not selected
function w3RemoveClass(element, name) {
var i, arr1, arr2;
arr1 = element.className.split(" ");
arr2 = name.split(" ");
for (i = 0; i < arr2.length; i++) {
while (arr1.indexOf(arr2[i]) > -1) {
arr1.splice(arr1.indexOf(arr2[i]), 1);
}
}
element.className = arr1.join(" ");
}
不幸的是,似乎有一个错误。 当我打开一个项目时,不要使用关闭按钮关闭它并导航到一个新类别并在那里打开一个项目,之前打开的项目会再次添加到 DOM 中(即使它不属于该类别!)。
我也找不到错误。我也无法确定这不是 Vue 的错。
但我尝试用 jQuery 过滤器替换 JavaScript 过滤器(这个过滤器与数据属性一起使用),遗憾的是这对我不起作用。因为我只能为每个项目添加一个属性。但有时一个项目属于多个类别。 (这个:https://jsfiddle.net/k5g6wcw3/21/)
// Variable
var posts = $('.post');
posts.hide();
// Click function
$( ".sort" ).click(function() {
// Get data of category
var customType = $( this ).data('filter'); // category
console.log(customType);
console.log(posts.length); // Length of articles
posts
.hide()
.filter(function () {
return $(this).data('cat') === customType;
})
.show();
});
// All
$( "#showAll" ).click(function() {
$( ".post" ).show();
});
进一步的想法
我知道这也应该与 vue 路由和 vuex 相关,但找不到我可以理解的方法。
谢谢
【问题讨论】:
-
改用
classListadd 和remove方法。 -
感谢您的超快速回复。不幸的是,我不太明白你在写什么。
-
在搜索引擎中输入“classList”:developer.mozilla.org/en-US/docs/Web/API/Element/classList
标签: javascript jquery vue.js