如何减少使用JQuery和.each()的javascript代码
我试图减少以下代码如何减少使用JQuery和.each()的javascript代码,javascript,jquery,each,selector,Javascript,Jquery,Each,Selector,我试图减少以下代码 var wgDialog = jQuery(".ui-dialog.ui-overlay-visible",window.parent.document) .each (function(nIndex) { var sWidgetName = $(this).attr('data-widgetvar'); var wgDialog
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变量在最后一段代码中始终未定义
我的错误是什么?假设要访问属性数据为widgetvar的元素,该元素嵌套在css类ui对话框和ui覆盖可见的元素中,则可以使用纯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>
在评论的帮助下,我找到了一个解决方案 我必须使用get0通过JQuery获取列表返回器中的第一个元素 我必须使用$jqDialog而不是jqDialog来获取'datawidgetvar'属性 这是我的新代码
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);
您的第二个添加了.children,因此第一个循环遍历所有的.ui对话框元素,而第二个则获取每个对话框的第一个子元素。然后.attr从这些元素的第一个元素中提取。需要知道html才能回答这个问题。但是element.ui-dialog.ui-overlay-visible的第一个子元素没有名为data widgetvar的属性。您可以尝试添加第一个子元素的元素名,这是您的一个选项。childrendiv:第一个孩子;例如,第一个和第二个代码执行完全不同的操作。第一个元素遍历所有.ui对话框元素,其中第二个元素只获取第一个.ui对话框元素的第一个子元素的属性“data widgetvar”。您希望在第一段代码中减少什么?我尝试了您的解决方案,用jqDialog替换myElement,但这不起作用。我尝试了一些小改变,但没有成功。我已经有了一个解决方案,但我有兴趣验证你的。你能告诉我如何分配jqDialog行吗?