内联样式在替换图元时会导致问题
Inline styles causing problems when replacing an element
我正在处理的脚本出现问题,该脚本从API获取相同的HTML元素并每20秒更新一次。我有一些脚本可以监视数据属性的变化,如果检测到变化,就会将其动画化到视图中。
我遇到的问题是在酒吧第一次出现后保持它的一致性。如果我将display: none
内联属性添加到元素中,或者如果我在页面加载时使用jQuery隐藏元素,脚本会重写该元素,从而导致它再次消失。
这是HTML元素:
<aside id="alert" class="row" style="display: none" data-supressed="false" data-path="path_here">
</aisde>
这就是Javascript的样子:
function reloadBar() {
/* Fires every 20 seconds. */
var $alert = $("#alert");
var path = $alert.data('path');
/* Performs an AJAX call on the feature path. */
$.ajax ({
url: path + secondary-path,
success: function(data) {
/* If successful it will replace the bar with the new bar. */
/* Grabs the updated element from the API */
var newBar = $($.parseHTML(data.rendering)).find('#alert');
var newBarHtml = newBar[0].outerHTML;
var currBarSupp = $alert.data('supressed');
var newBarSupp = newBar.data('supressed');
/* If the new bar is supressed and old one is not, hide it. */
if (!currBarSupp && newBarSupp) {
$alert.animate({height:0});
$alert.parent().animate({height:0}, function() {
$(this).hide()
});
}
else {
/* Replaces the element */
$alert.replaceWith(newBarHtml);
/* If the new bar is not supressed, update it and animate it into view. */
if (!newBarSupp) {
updateBar(true);
}
}
}
})
};
updateBar()将触发哪个动画进入视图:
function updateBar(isReload) {
var $alert = $("#alert");
if (isReload === true) {
$alert.css("display","block")
$alert.animate({height:"45px"});
$alert.parent().animate({height:"45px"}, function() {
$(this).hide().show("slow");
});
}
}
20秒后,reloadBar脚本将再次启动,并将display: none
属性返回到side元素,这将导致它在不应该出现的时候消失。
有没有一种更一致的方法可以在元素上保持该属性?任何向元素添加任何类型的内联样式/类的行为都会导致它出现问题。我发现,即使我在脚本最初启动时尝试使用.hide(),它仍然会替换元素并删除display: none
,所以问题会双向发生。
有什么建议吗?
我通过在HTML元素上使用字符串切片并将CSS元素修补到它上来解决了这个问题。首先,我使用var currStyles = $alert.attr("style");
保存了当前元素的样式属性
之后,我拆分了通过API提供的更新元素的字符串,并将内联样式添加到其中。我将其分配给一个名为updatedBar:的新变量
var updatedBar = newBarHtml.slice(0,6) + ' style="' + currStyles + '"' + newBarHtml.slice(6);
然后我用updatedBar变量替换了页面上的那个元素。
$alert.replaceWith(updatedBar);
脚本现在在从页面中获取新元素后保持内联样式的一致性,因此jQuery hide()和show()现在可以按预期工作。
相关文章:
- 用直线连接图元
- 在多个图元(超过2个)上重复此操作
- 如果显示另一个折叠的图元,如何隐藏该图元
- 缩放仅适用于一个图元
- 从选择中排除图元
- 单击图元模拟Esc键
- 如果图元属于嵌套图元,请选择对其进行筛选的图元
- 主干:如何操作与视图关联的图元之外的图元
- 如何基于力沿弯曲路径移动图元
- 修改两个基于彼此的选择图元
- 在“视口”上更改“图元类型”
- 将挖空.js模型应用于多个图元
- 淡入视图中的图元,淡出视图时淡入淡出
- 使图元在从其中心拖动时调整大小
- 需要根据条件隐藏选定的图元
- 内联样式在替换图元时会导致问题
- 获取当前单击的相对于图元的坐标
- 选择不适用于动态创建的选择图元.总是选择最后一个选项
- 对两个单独的图元应用相同的切换
- 设置流体布局中选择图元的样式时出现问题