通过普通函数而不是 jQuery 对象方法调用打开 Bootstrap 模式

Posted

技术标签:

【中文标题】通过普通函数而不是 jQuery 对象方法调用打开 Bootstrap 模式【英文标题】:Open a Bootstrap modal via a plain function not a jQuery object method call 【发布时间】:2021-07-14 05:06:41 【问题描述】:

我可以通过 jQuery 对象上的 方法 打开 Bootstrap 的 modal dialogs:

$('#myModal').modal(options)

但是在我的代码中,我已经将模态 div 的普通 DOM Element 检索为

var myModal = document.querySelector("#myModal")

但是这个Element 对象没有Bootstrap 的modal 方法。有没有办法使用这个 Element 对象和 not 来调用 jQuery 选择器?那么是否可以将 Bootstrap 的 modal 代码作为普通的 function 以 Element 作为参数来调用?我正在考虑类似的事情

modal(myModal, options)

任何指针都非常感谢!

【问题讨论】:

【参考方案1】:

没有办法像 modal(myModal, options) 那样做,因为 Bootstrap(像所有插件一样)扩展了 jQuery 函数原型。

当 Bootstrap 的 javascript 首次运行时,它使用类似于 $.fn.modal 的代码扩展 jQuery 的原型函数,然后 Bootstrap 将模态功能分配给新的 jQuery 函数。

现在,如果您已经将模态元素分配给 JavaScript 变量,则可以将该变量用作 jQuery 选择器并显示、切换或隐藏或任何您想要的操作。我不知道这样做是否有任何好处,但这是可能的。

在下面的演示中,我使用 JavaScript 在页面加载时打开一个模式:

<link href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="myModalLabel">Modal title</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                ...
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Save changes</button>
            </div>
        </div>
    </div>
</div>

<script>
    const myModalElement = document.getElementById('myModal');

    $(myModalElement).modal('show');

    /* $('#myModal').modal('show'); */
</script>

【讨论】:

以上是关于通过普通函数而不是 jQuery 对象方法调用打开 Bootstrap 模式的主要内容,如果未能解决你的问题,请参考以下文章

类方法

有没有办法让普通链接通过ajax自动加载,而不是正常?

函数的调用方式

主函数调用普通方法

JQuery优化之 -- jquery对象的使用

python 类中staticmethod,classmethod,普通方法