更改克隆字段中的 aria 控件属性值

Changing aria-control attribute value in Cloned fields

本文关键字:aria 控件 属性 字段      更新时间:2023-09-26

>我已经更改了米兰·贾里克(Milan Jaric)从这个问题中给出的代码 Jquery 克隆表单字段和增量 ID,但我遇到了一个问题,我正在尝试克隆引导程序折叠。我看不到如何更改属性"aria-control"值。

这是我目前拥有的演示。 ID 和 HREF 本身工作正常,但是当我尝试更改"aria-control"值时,引导折叠中的所有 ID 和 href 都不会从默认值更改。 有什么想法吗?

JS脚本

var regex = /^(.*)('d)+$/i;
var cloneIndex = $(".clonedBox").length;
function clone() {
    $(this).parents(".clonedBox").clone()
        .appendTo("div#accession_boxes")
        .attr("id", "clonedBox" + cloneIndex)
        .find("*")
        .each(function () {
            var id = this.id || "";
            var match = id.match(regex) || [];
            if (match.length == 3) {
                this.id = match[1] + (cloneIndex);
                this.href = match[1] + (cloneIndex);
                this.attr("a[aria-controls]") = match[1] + cloneIndex;
            }
        })
        .on('click', '#btnAddBox', clone)
        .on('click', '#btnDelBox', remove);
    cloneIndex++;
}
function remove() {
    $(this).parents(".clonedBox").remove();
}
$("#btnAddBox").on("click", clone);
$("#btnDelBox").on("click", remove);

是的,我知道我的删除按钮不起作用,但现在这不是优先事项。

编辑:

感谢 lmgonzalves,JS 脚本现在可以工作了。下面是更新的脚本。再次感谢您的所有帮助!

JS脚本(更新)

    var regex = /^(.*)('d)+$/i;
var cloneIndex = $(".clonedBox").length;
function clone() {
    $(this).parents(".clonedBox").clone()
        .appendTo("div#accession_boxes")
        .attr("id", "clonedBox" + cloneIndex)
        .find("*")
        .each(function () {
            var id = this.id || "";
            var href = this.href || "";
            var aria = $(this).attr("aria-controls") || "";
            var matchID = id.match(regex) || [];
            var matchHref = href.match(regex) || [];
            var matchAria = aria.match(regex) || [];
            if (matchID.length == 3) {
                this.id = matchID[1] + (cloneIndex);
                this.href = matchHref[1] + (cloneIndex);
                this.aria = matchAria[1] + (cloneIndex);
            }
        })
        .on('click', '#btnAddBox', clone)
        .on('click', '#btnDelBox', remove);
    cloneIndex++;
}
function remove() {
    $(this).parents(".clonedBox").remove();
}
$("#btnAddBox").on("click", clone);
$("#btnDelBox").on("click", remove);

要使用 attr() 设置属性,您需要以下语法:

$(element).attr("name", value);

因此,在您的代码中使用:

$(this).attr("aria-controls", match[1] + cloneIndex);

相反:

this.attr("a[aria-controls]") = match[1] + cloneIndex;

请注意,您还需要$() this"包装"以将其转换为jQuery对象,并允许使用attr()和其他jQuery函数。

在这里演示