javascript - Javascript DOM .querySelector() 空问题
问题描述
我正在用纯 JavaScript 编写代码,在很多情况下我会使用querySelector()
方法,我多次遇到问题,例如
以下代码的“未捕获的类型错误:无法读取 null 的属性 'classList'”,
document.querySelector('.tab.active').classList.remove('active');
/** 选项卡当时不可用**/
在 Jquery$('.tab.active').removeClass('active');
中,仅当元素可用且不会引发错误时才会运行。
我想在 JavaScript 中实现类似的行为。请提供您的想法。
我不愿意为我做的每一个 DOM 操作写三行代码,寻找像 Jquery 这样的一行代码。
var activeTab = document.querySelector('.tab.active');
if(activeTab !== 'null' ){
activeTab.classList.remove('active');
}
解决方案
像您最初所做的那样明确检查代码中元素的存在肯定是您可以做到的最清晰的方法,但如果您真的不想这样做,您可以创建自己的函数,如果没有找到元素, 返回一个对象,其方法不做任何事情。例如:
const customQS = selector => (
document.querySelector(selector)
|| {
classList: {
remove: () => void 0
}
}
);
customQS('.tab.active').classList.remove('active');
console.log('done, no error');
当然,使用该方法,您必须为要使用的每个 DOM 方法创建属性。一个更强大的选择是实际创建一个元素并返回它,这会更昂贵,但该元素将在之后立即被垃圾收集:
const customQS = selector => (
document.querySelector(selector)
|| document.createElement('div')
);
customQS('.tab.active').classList.remove('active');
console.log('done, no error');
推荐阅读
- xamarin - 如何让 camera2 api 第二次工作?
- react-native - 如何在 react-native中将“编辑”图标作为按钮添加到组件
- python - 即使调整图形大小,如何在图例和轴之间获得恒定距离?
- c - c中的最小堆和堆排序算法
- python - 在 Gurobi 中添加二进制变量
- php - Yii2:为什么 kartik\select2 小部件没有填充然后我尝试更新模型?
- reactjs - 使 MUI 对话框内容大小跟随内容的大小
- python - 在 python 脚本中完成另一项任务后开始一项任务
- django - 如何将我的简单自定义 django 模板标签与 if 语句一起使用?
- swift - 在两个视图控制器之间传递一个巨大的二维数组