如何将我的 jquery/javascript 函数重新编码为更通用且不需要唯一标识符?

how to recode my jquery/javascript function to be more generic and not require unique identifiers?

我创建了一个运行良好的函数,但它导致我有更多混乱的 html 代码,我必须在其中对其进行初始化。我想看看我是否可以让它更通用,当一个对象被点击时,javascript/jquery 抓取 href 并执行函数的其余部分,而不需要每个被点击的对象的唯一 ID。

当前有效的代码:

<script type="text/javascript">

   function linkPrepend(element){
    var divelement = document.getElementById(element);
    var href=$(divelement).attr('href');

    $.get(href,function (hdisplayed) {
     $("#content").empty()
     .prepend(hdisplayed);
        });
     }
 </script>

html:

<button id="test1" href="page1.html" onclick="linkPrepend('test1')">testButton1</button>

<button id="test2" href="page2.html" onclick="linkPrepend('test2')">testButton1</button>

    <!-- when clicking the button, it fills the div 'content' with the URL's html -->

        <div id="content"></div>

我希望最终 html 看起来像这样:

<button href="page1.html" onclick="linkPrepend()">testButton1</button>

<button href="page2.html" onclick="linkPrepend()">testButton1</button>

<!-- when clicking the button, it fills the div 'content' with the URL's html -->

<div id="content"></div>

如果有更简单的方法请告诉。也许 javascript/jquery 使用事件处理程序并监听点击请求可能有更通用的方式?那么我什至不需要 onclick html 标记?

如果可能的话,我更愿意使用纯 jquery。

您可以传递 this 而不是 ID。

<button data-href="page2.html" onclick="linkPrepend(this)">testButton1</button>

然后使用

function linkPrepend(element) {
    var href = $(this).data('href');

    $.get(href, function (hdisplayed) {
        $("#content").empty().prepend(hdisplayed);
    });
}

注意:您可能已经注意到我将 href 更改为 data-href。这是因为 href 是按钮的无效属性,因此您应该使用 HTML 5 data-* 属性。

但是,如果您使用的是 jQuery,则应保留内联点击处理程序并使用 jQuery 处理程序

<button data-href="page2.html">testButton1</button>

$(function () {
    $('#someparent button').click(function () {
        var href = $(this).data('href');
        $.get(href, function (hdisplayed) {
            $("#content").empty().prepend(hdisplayed);
        });
    });
});

$('#someparent button') 在这里您可以使用 CSS 选择器来找到正确的按钮,或者您可以向它们附加一个额外的 class。

这很容易通过 jQuery:

$("button.prepend").click( function(){
    var href = $(this).attr("href");
    $.get(href,function (hdisplayed) {
        $("#content").html( hdisplayed );
    });
});

和小 HTML 修改(添加 prepend class):

<button href="page1.html" class="prepend">testButton1</button>
<button href="page2.html" class="prepend">testButton2</button>
<div id="content"></div>

HTML代码

<button href="page1.html" class="showContent">testButton1</button>

<button href="page2.html"class="showContent">testButton1</button>

<!-- when clicking the button, it fills the div 'content' with the URL's html -->

<div id="content"></div>

JS代码

<script type="text/javascript">

   $('.showContent').click(function(){
         var $this = $(this),
             $href = $this.attr('href');

          $.get($href,function (hdisplayed) {
            $("#content").empty().prepend(hdisplayed);
        });
     }

    });

 </script>

希望对您有所帮助。

我建议在 JavaScript(在加载或就绪期间)而不是在您的标记中设置点击事件。在要应用此点击事件的按钮上放置一个普通的 class。例如:

<button class="prepend-btn" href="page2.html">testButton1</button>


<script>
    $(document).ready(function() {
        //Specify click event handler for every element containing the ".prepend-btn" class
        $(".prepend-btn").click(function() {
            var href = $(this).attr('href');  //this references the element that was clicked
            $.get(href, function (hdisplayed) {
                $("#content").empty().prepend(hdisplayed);
            });
        });
    });
</script>

href 不是用于存储自定义属性的 button element. You can instead use the data 属性的有效属性。您的标记可能如下所示

<button data-href="page1.html">Test Button 1</button>
<button data-href="page2.html">Test Button 1</button>
<div id="content">
</div>

从那里您可以使用 Has Attribute selector to get all the buttons that have the data-href attribute. jQuery has a function called .load() 获取内容并将其加载到目标中。所以你的脚本看起来像

$('button[data-href]').on('click',function(){
    $('#content').load($(this).data('href'));
});

查看其他回复,将它们结合起来。

<button data-href="page2.html" class="show">testButton1</button>
<li data-href="page1.html" class="show"></li>

class 使您能够将此特定 javascript 功能置于您选择的任何位置。

$(".show").click( function(){
    var href = $(this).attr("data-href");
    $.get(href,function (hdisplayed) {
        $("#content").html( hdisplayed );
    });
});