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,它工作正常/