簡體   English   中英

如何檢查我的DOM是否已包含ID的元素?

[英]How can i check if my DOM already contains an element by id?

我想知道是否可以檢查我的DOM是否包含元素ID。 實際上,我會動態加載我的模板(劍道模板)並將其附加到我的體內。

<body>
    ...

    <script type="text/x-kendo-template" id="test-view">
        ...
    </script>
</body>

目前,我的加載腳本是

//Creates a gloabl object called templateLoader with a single method "loadExtTemplate"
var templateLoader = (function ($, host) {
    //Loads external templates from path and injects in to page DOM
    return {
        //Method: loadExtTemplate
        //Params: (string) path: the relative path to a file that contains template definition(s)
        loadExtTemplate: function (path) {
            //Use jQuery Ajax to fetch the template file
            var tmplLoader = $.get(path)
                .success(function (result) {
                    //On success, Add templates to DOM (assumes file only has template definitions)
                    var regSplit = new RegExp("[/\]+", "g");
                    var pathTab = path.split(regSplit);
                    var templateName = pathTab[pathTab.length - 1];
                    var regReplace = new RegExp("[.]+", "g");
                    var templateName = templateName.replace(regReplace, "-");
                    var s = $("<script type=\"text/x-kendo-template\" id=\"" + templateName + "\">" + result + "</script>");
                    $("body").append(s);
                })
                .error(function (result) {
                    alert("Error Loading Templates -- TODO: Better Error Handling");
                })

            tmplLoader.complete(function () {
                //Publish an event that indicates when a template is done loading
                $(host).trigger("TEMPLATE_LOADED", [path]);
            });
        }
    };
})(jQuery, document);

在加載模板之前,我需要檢查該模板是否已經加載。 我需要檢查是否存在具有id =“ test-view”的腳本。 我怎樣才能做到這一點?

var elementExists = (document.getElementById("elementId") !== null);

現在, elementExists將包含一個布爾值,該布爾值告訴您該元素是否已經存在。

var element = $('#' + templateName)
if(!element.length) {
   // create your template
}

我建議添加

if(document.getElementById(templateName)) return;

var templateName = templateName.replace(regReplace, "-");

因此,您的代碼變為:

.success(function (result) {
    //On success, Add templates to DOM (assumes file only has template definitions)
    var regSplit = new RegExp("[/\]+", "g");
    var pathTab = path.split(regSplit);
    var templateName = pathTab[pathTab.length - 1];
    var regReplace = new RegExp("[.]+", "g");
    var templateName = templateName.replace(regReplace, "-");
    if(document.getElementById(templateName)) return;
    var s = $("<script type=\"text/x-kendo-template\" id=\"" + templateName + "\">" + result + "</script>");
    $("body").append(s);
})

您可以使用長度或大小來做到這一點:

例如,

$("#test-view").length //$("#test-view").size()

使用jQuery:

if ($("#test-view").length) {...}

純JavaScript:

if (document.querySelectorAll("#test-view").length) {...}

和一些評論:

  • [html4] id不是script標記的常規屬性(但AFAIK所有瀏覽器都支持它)
  • 上面的代碼適用於任何選擇器,不僅限於id
  • IE7不支持querySelectorAll

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM