Javascript 选择具有可变数据属性的元素,但有些元素使用破折号
因此,我制作了一个函数来选择一个单击的span元素,这取决于它的数据属性和它的值。我做的Javascript 选择具有可变数据属性的元素,但有些元素使用破折号,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,因此,我制作了一个函数来选择一个单击的span元素,这取决于它的数据属性和它的值。我做的 function moveFilterElements(event) { if ($(event).hasClass('active')) { var dataAttributes = $(event).data(), dataKey = Object.keys(dataAttributes)[0],
function moveFilterElements(event) {
if ($(event).hasClass('active')) {
var dataAttributes = $(event).data(),
dataKey = Object.keys(dataAttributes)[0],
dataValue = dataAttributes[Object.keys(dataAttributes)[0]];
$(event).parents('.filters-container').find('.label[data-' + dataKey + '=' + dataValue + ']').toggleClass('active');
$(event).parents('.filters-container').find('.btn-show-filters').find('.label[data-' + dataKey + '=' + dataValue + ']').remove();
updateFiltering();
}
else {
var clonedActiveItem = $(event).clone(true);
$(event).parents('.filters-container').find('.filters-selected').append(clonedActiveItem);
clonedActiveItem.toggleClass('active');
$(event).toggleClass('active');
updateFiltering();
}
}
F.ex数据属性如下所示:“数据主体”-工作正常
由于HTML DOM标准,“数据类别名称”转换为“categoryName”
我可以通过将它们命名为“data categoryname”来绕过这个问题,但这也与命名标准相冲突
那我该怎么解决这个问题呢?我需要一个正则表达式来重新区分这个词吗?这是唯一的办法吗 你的假设有点偏离。仅当使用元素的数据集时,数据类别名称才会变为categoryName 但这不适用于getAttribute: const div=document.querySelector'data_example'; const category_from_dataset=div.dataset; console.log JSON.stringify category_来自_数据集; //在使用数据集时,我们需要使用javascript camelcase来访问DOMStringMap console.log category_from_dataset.categoryName; //当使用getAttribute时,我们可以使用写入的属性名,它将自动转换为数据集的正确大小写。 const category_from_attribute=div.getAttribute“数据类别名称”; console.log category_from_属性;
例如,将“数据类别名称”转换为“数据类别名称”的确切含义是什么?它不是HTML标准,数据属性名称应该全部为小写。你在使用MVC/Razor吗?如果是这样,使用u而不是-作为名称,它会将u转换为-。这:啊,感谢您的澄清-这是专门与.dataset有关的-这不是HTML DOM造成的,而是jquery.data-不管您还有什么原因。jquery调用.camelCase内部方法来完成此操作,相反的是在这里,您可以使用:但是这里您使用div.getAttribute'data-category-name'选择它,我需要拉出数据属性,然后再次选择它,这就是categoryName与category name冲突的地方如果您事先不知道数据属性,然后,您确实需要解析HTML中以数据开头的任何内容—使用正则表达式。但我的问题是,为什么?只过滤源数据并重新提交HTML要比实际处理原始DOM节点容易得多。你是说重命名HTML中的数据属性吗?或者?我的意思是根本不过滤DOM。有一个独立的数据模型,比如一个数组和一个渲染该数组的函数。然后,如果必须进行更改,例如从表中删除行,只需将这些行从模型数组中筛选出来,然后重新加载表,完全不需要查找特定的呈现HTML节点、查找它们的类、解析它们、重新加载,等等,@NicklasN I添加了一个函数,将数据集中的名称转换为小写虚线。也许这是有用的。