Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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 如果包装器包含特定元素,则替换HTML标记_Javascript_Jquery - Fatal编程技术网

Javascript 如果包装器包含特定元素,则替换HTML标记

Javascript 如果包装器包含特定元素,则替换HTML标记,javascript,jquery,Javascript,Jquery,如果字段集中没有输入,我想将替换为。我正朝着这个方向走,但完成它有困难 (function ($) { const selector = { fieldsetWrapper: '.fieldsetWrapperClass', radioWrapper: '.class-for-radio-input' }; class FieldsetReplace { constructor(element) {

如果字段集中没有
输入,我想将
替换为
。我正朝着这个方向走,但完成它有困难

(function ($) {
    const selector = {
        fieldsetWrapper: '.fieldsetWrapperClass',
        radioWrapper: '.class-for-radio-input'
    };

    class FieldsetReplace {
        constructor(element) {
            this.$fieldsetWrapper = $(element);
            this.$fieldsetWrapper= this.$fieldsetWrapper.find(selector.fieldset);
            this.replaceFieldset();
        }

        replaceFieldset() {
           if (!this.fieldsetWrapper.has("input")) {
                $('fieldset', this).replaceWith(function(){
                    return $("<div />").append($(this).contents());
                });
            }
        }
   }
(函数($){
常量选择器={
fieldsetWrapper:“.fieldsetWrapperClass”,
radioWrapper:“.用于无线电输入的类”
};
类字段集替换{
构造函数(元素){
此.$fieldsetWrapper=$(元素);
this.$fieldsetWrapper=this.$fieldsetWrapper.find(selector.fieldset);
这个.replaceFieldset();
}
replaceFieldset(){
如果(!this.fieldsetWrapper.has(“输入”)){
$('fieldset',this).replaceWith(function(){
返回$(“”).append($(this.contents());
});
}
}
}

在您提供的代码中,带有
$('fieldset',this)
的行将您的
FieldsetReplace
实例传递给jQuery,它不知道该怎么办。您似乎还缺少一个
选择器.fieldset
值,但我认为这可能只是您的代码片段中的一个输入错误

在下面的代码片段中,我已经将您的代码简化为专门与您的问题相关的部分。您似乎在理解JavaScript中的
this
关键字时遇到了困难。在jQuery方法中,
this
通常表示jQuery对象中的单个元素。但是,除此之外,它还可以运行我的看法不同

有关此
的更多信息,请随时发表评论或参阅MDN文档

const replacefieldsetswithoutput=函数(elementselector){
常量$fieldset=$(elementSelector).find('fieldset:not(:has(input)))
$fieldset.replaceWith(函数(){
返回$('').append($(this.contents())
})
}
ReplaceFieldSetswithOutput('.js fieldset包装器')

测试2
测试3
DOM方法和属性 以下演示使用以下内容:


演示 演示中评论的详细信息

//将所有节点收集到节点列表中
变量集=document.queryselectoral('fieldset');
//对于每个。。。
/* 
如果a没有。。。
获取的父对象。。。
创建一个和。。。
在前面插入。
将和的子标记放入数组中,然后。。。
迭代的子标签,然后。。。
将标记附加到。
去除
*/
set.forEach((set)=>{
如果(!set.contains(set.querySelector('input')){
var parent=set.parentNode;
var div=document.createElement('div');
set.insertAdjacentElement('beforebeagin',div);
var content=Array.from(set.children);
用于(内容标签){
div.appendChild(标签);
}
parent.removeChild(set);
}
});
div{
边框:1px红色虚线;
}

内容
内容

$('fieldset')
->
$('fieldset',this)
你有什么问题?你在哪里卡住了?这是一个打字错误吗?
如果是这样。$fieldsetWrapper(:not(:has(input))
如果(!this.fieldsetWrapper.has(“input”))@freedomn-m我在最后一部分卡住了
replaceFieldset()
。我无法正确编写此部分
:不是(:has…
。我需要这方面的帮助。我还打开了其他解决方案。@freedomn-m是的,谢谢。这是我需要的第一部分。第二点是…内部替换不起作用。@Jakub如果您需要进一步的帮助,我需要更多的信息。代码段的工作原理与我理解您的问题的方式完全相同-它将
元素替换为t没有
子体。我是否误解了您的意图?我通过运行此代码段并粘贴到我的环境中来检查它。您的代码不起作用。它没有替换没有
输入的字段集
子体。很有趣。我运行了它,它工作正常。您使用的浏览器是什么?我签入了FF。在这种情况下,很抱歉,我不确定出了什么问题。我签入Firefox,它工作正常/