簡體   English   中英

如何減少使用JQuery和.each()的JavaScript代碼

[英]How to reduce javascript code that use JQuery and .each()

我試圖減少以下代碼

var wgDialog 
    = jQuery(".ui-dialog.ui-overlay-visible",window.parent.document)
        .each
            (function(nIndex)
                {
                var sWidgetName = $(this).attr('data-widgetvar');
                var wgDialog = window.parent.PF(sWidgetName);
                });

這個代碼

var jqDialog 
    = jQuery(".ui-dialog.ui-overlay-visible",window.parent.document)
        .children(":first-child");

var sWidgetName = jqDialog.attr('data-widgetvar');
var wgDialog = window.parent.PF(sWidgetName);

但這是行不通的!

sWidgetName變量在上一個代碼中始終未定義。

我的錯是什么?

在評論的幫助下,我找到了解決方案。

我必須使用get(0)來通過JQuery()獲得列表返回器中的第一個元素。

而且我必須使用$(jqDialog)而不是jqDialog來獲取“ data-widgetvar”屬性。

這是我的新代碼

var jqDialog 
    = jQuery(".ui-dialog.ui-overlay-visible",window.parent.document)
        .get(0);

var sWidgetName = $(jqDialog).attr('data-widgetvar');
var wgDialog = window.parent.PF(sWidgetName);

假設您要訪問嵌套在具有css類ui-dialogui-overlay-visible的元素中的屬性data-widgetvar的元素,則可以使用簡單的javascript執行以下操作:

var myElement = document.querySelector('.ui-dialog.ui-overlay-visible [data-widgetvar]');    

querySelector允許類似CSS的選擇器將類與屬性選擇器組合在一起。

更新

這是一個工作示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Test</title>
    <script type="text/javascript">
        function main() {
            var myElement = document.querySelector('.ui-dialog.ui-overlay-visible [data-widgetvar]');
            console.log("Attribute value", myElement.getAttribute('data-widgetvar'));
        }

        document.addEventListener("DOMContentLoaded", main);        
    </script>
</head>

<body>
    <div class="ui-dialog ui-overlay-visible">
        <div>some element</div>
        <div data-widgetvar="someValue">some text content</div>
    </div>
</body>

</html>

暫無
暫無

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

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