Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择具有可变数据属性的元素,但有些元素使用破折号_Javascript_Jquery_Jquery Selectors - Fatal编程技术网

Javascript 选择具有可变数据属性的元素,但有些元素使用破折号

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],

因此,我制作了一个函数来选择一个单击的span元素,这取决于它的数据属性和它的值。我做的

    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添加了一个函数,将数据集中的名称转换为小写虚线。也许这是有用的。