使用 javascript 动态切换 FA 图标不会 return 原始图标
Using javascript to dynamically toggle FA icons doesn't return original icon
我有一个看起来像这样的按钮:
<button class="btn btn-sm btn-xs-block btn-success" :data-lane-id="items[0].lane.id" type="button" v-on:click="callNextCustomer(items[0].lane.id)" :class="hasMorePeople(items)">Next Customer <i class="fas fa-bell"></i></button>
按下按钮后,callNextCustomer
函数运行以下内容:
const spinnerIcon = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>';
var button = document.querySelectorAll('button[data-lane-id="'+lane_id+'"]')
button[0].disabled = true;
button[0].innerHTML = 'Next Customer ' + spinnerIcon;
// run external request using promise
// when complete run the following
button[0].disabled = false;
button[0].innerHTML = 'Next Customer <i class="fas fa-bell"></i>';
执行代码时,文本按预期更改,但图标不显示。使用 Google Dev Inspector 我可以看到图标标记存在。
谁能解释一下为什么没有显示?我正在使用 Font Awesome v5,我将 CSS 和 JS 都加载到我的页面,我加载了以下 JS:
<script data-search-pseudo-elements defer src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/js/all.min.js" crossorigin="anonymous"></script>
IIRC,这是因为使用 font awesome 5,所有图标都在页面加载时加载。因为您是事后编辑 innerHTML,所以您添加的超赞字体脚本的“JS”部分不会再次触发以使用 fa-bell 图标进行更新。
如果加载两个图标并将隐藏的 class 放在另一个图标上,并在单击按钮时将两个图标 class 切换为隐藏会怎样?
<button class="btn btn-sm btn-xs-block btn-success" :data-lane-id="items[0].lane.id" type="button" v-on:click="callNextCustomer(items[0].lane.id)" :class="hasMorePeople(items)">
Next Customer
<span class="icon hidden spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
<i class="icon fas fa-bell"></i>
</button>
.icon.hidden {
display: none;
}
单击按钮时,您只需执行 $.jquery 命令即可将 .icon 的 class 切换为隐藏,每次单击它们的 class 将切换为隐藏。
第 1 单击
并添加了隐藏的< i class="icon hidden
fas fa-bell">class。
第2次点击反之
我有一个看起来像这样的按钮:
<button class="btn btn-sm btn-xs-block btn-success" :data-lane-id="items[0].lane.id" type="button" v-on:click="callNextCustomer(items[0].lane.id)" :class="hasMorePeople(items)">Next Customer <i class="fas fa-bell"></i></button>
按下按钮后,callNextCustomer
函数运行以下内容:
const spinnerIcon = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>';
var button = document.querySelectorAll('button[data-lane-id="'+lane_id+'"]')
button[0].disabled = true;
button[0].innerHTML = 'Next Customer ' + spinnerIcon;
// run external request using promise
// when complete run the following
button[0].disabled = false;
button[0].innerHTML = 'Next Customer <i class="fas fa-bell"></i>';
执行代码时,文本按预期更改,但图标不显示。使用 Google Dev Inspector 我可以看到图标标记存在。
谁能解释一下为什么没有显示?我正在使用 Font Awesome v5,我将 CSS 和 JS 都加载到我的页面,我加载了以下 JS:
<script data-search-pseudo-elements defer src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/js/all.min.js" crossorigin="anonymous"></script>
IIRC,这是因为使用 font awesome 5,所有图标都在页面加载时加载。因为您是事后编辑 innerHTML,所以您添加的超赞字体脚本的“JS”部分不会再次触发以使用 fa-bell 图标进行更新。
如果加载两个图标并将隐藏的 class 放在另一个图标上,并在单击按钮时将两个图标 class 切换为隐藏会怎样?
<button class="btn btn-sm btn-xs-block btn-success" :data-lane-id="items[0].lane.id" type="button" v-on:click="callNextCustomer(items[0].lane.id)" :class="hasMorePeople(items)">
Next Customer
<span class="icon hidden spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
<i class="icon fas fa-bell"></i>
</button>
.icon.hidden {
display: none;
}
单击按钮时,您只需执行 $.jquery 命令即可将 .icon 的 class 切换为隐藏,每次单击它们的 class 将切换为隐藏。
第 1 单击
并添加了隐藏的< i class="icon hidden
fas fa-bell">class。
第2次点击反之