Javascript 从jquery中的所有子体中删除样式属性
我是javascript/jquery的新手,但到目前为止进展顺利(尽管您不想看到我的代码),但我在尝试从一些试图克隆的HTML中删除样式标记时遇到了麻烦 克隆的原因是,我被迫使用的CMS(我无法访问代码隐藏,只能在顶部添加代码)会自动生成顶部导航,我想在用户滚动后添加一个重复的粘性导航,但也会在滚动版本中添加一些元素 顶部导航的原始HTML看起来有点像:Javascript 从jquery中的所有子体中删除样式属性,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我是javascript/jquery的新手,但到目前为止进展顺利(尽管您不想看到我的代码),但我在尝试从一些试图克隆的HTML中删除样式标记时遇到了麻烦 克隆的原因是,我被迫使用的CMS(我无法访问代码隐藏,只能在顶部添加代码)会自动生成顶部导航,我想在用户滚动后添加一个重复的粘性导航,但也会在滚动版本中添加一些元素 顶部导航的原始HTML看起来有点像: <nav id="mainNavigation" style="white-space: normal; display: block
<nav id="mainNavigation" style="white-space: normal; display: block;">
<div class="index">
<a href="/participate/">Participate</a>
</div>
<div class="index" style="margin-right: 80px;">
<a href="/news/">News</a>
</div>
<div class="index active" style="margin-left: 80px;">
<a class="active" href="/about/">About</a>
</div>
<div class="external">
<a href="/collection/">Collection</a>
</div>
<div class="index">
<a href="/contact/">Contact</a>
</div>
</nav>
我在以下方面取得了轻微的成功(除了那些我想删除的样式标记),尽管这对我来说似乎没有什么意义,因为我预期一些元素会重复(整个标记应该在#mainNavigation克隆中,否?):
var originalNavItems=$('#mainNavigation').clone().html();
$(“#站点”).prepend('
“+原始导航项+”
');
我试着在这里使用一些相关问题的答案,但我总是得到不正确的结果。你能帮我吗?你可以克隆到一个虚构的div中,然后获取
mainNavigation
。也可以同时删除样式属性。希望这对你有用
var temp = $('<div />').html($('#mainNavigation').clone());
temp.find('*').removeAttr('style');
originalNavItems = temp.html();
var temp=$('').html($('.#主导航').clone();
临时查找('*').removeAttr('style');
originalNavItems=temp.html();
您可以使用
var originalNavItems = $('#mainNavigation').clone().find("*").removeAttr("style");
然后可以使用.append()
添加该html元素
您可以这样剥离样式元素:
var el = $('#mainNavigation'); // or whatever
el.find('[style]').removeAttr('style');
nav
被克隆,但是html()
函数只返回内容的html,这就是它消失的原因。通过将克隆元素直接添加到目标元素之前,可以避免一些字符串操作
$("#site").prepend('
<div id="ScrollNavWrapper">
<div class="nav-wrapper show-on-scroll" id="mainNavWrapper">
<nav id="newScrolledNav" style="white-space: normal; display: block;">
<div class="index home">
<a href="/">Home</a>
</div>
<div class="newItem">
<a href="http://www.externalsite.com">
View on External Site
</a>
</div>
</nav>
</div>
</div>');
$('#mainNavigation').clone()
.find('[style]').removeAttr('style').end()
.insertBefore('#newScrolledNav .newItem');
$(“#站点”).prepend('
');
$('#mainNavigation').clone()
.find(“[style]”)。removeAttr('style')。end()
.insertBefore(“#newScrolledNav.newItem”);
在上一个例子中,find(“[style]”)
匹配具有style
属性的元素。我对堆栈溢出(以及一般的js)是新手,所以这可能是非常糟糕的ettiquette,但我自己在尝试调试@Anoop Joshi给出的第一个向上投票的答案时,似乎意外地修复了它。请发表评论,并让我知道,如果只是编辑我的问题会更好
我决定将这个过程分解为不同的步骤——实际上类似于@Kiran Reddy的回答,但我还没有尝试他的回答
我试过:
var styledHTML = $('#mainNavigation').clone();
styledHTML.find("div[style]").removeAttr('style');
var originalNavItems = styledHTML.html();
$("#site").prepend('<div… etc.
var styledHTML=$('#mainNavigation').clone();
styledHTML.find(“div[style]”)。removeAttr(“style”);
var originalNavItems=styledHTML.html();
$(“#site”).prepend(“请尝试以下代码
$('#mainNavigation').children().removeAttr('style');
希望这对您有所帮助。另外,请参考.prepend(“…”中的html我以前没有换行符,我只是添加了这些换行符来尝试澄清我正在尝试做的事情……我没有看到你试图在任何地方删除样式属性,这不是你的主要问题吗?那么你到底想做什么?克隆导航条并添加到它?
位是克隆的一部分,但是.html()
返回该
的内部html,即不是标记本身。抱歉@PeterHerdenborg–我的意思是,上面的操作用于克隆和添加到nav(@KyleT,是的,这是正确的)–但是现在我需要删除样式。.html($('mainNavigation').clone()如果我没有弄错的话,
将失败并出现错误。@PeterHerdenborg不,它工作正常,没有任何错误。这很奇怪,因为.html()
需要一个字符串,而.clone()
返回一个jQuery集合。我已经尝试过了。据我所知,它似乎删除了div元素,但留下了它们的后代a链接或其他奇怪的东西???我再次尝试,它似乎仍然不起作用。将OriginalNavitem追加到另一个元素中会将“Object Object”放入HTML中,然后追加OriginalNavitem.html()似乎根本不起作用。在尝试调试时,虽然我自己意外地修复了问题。我在下面发布了它作为答案,我不知道这样做是否是错误的,但我想如果其他人正在寻找类似的问题,那么我的解决方案,尽管不是很优雅,也可能会有帮助…谢谢!我想这可能是最好的解决方案下面是我意外解决方案的关键元素。早些时候,我一直在尝试声明一个新变量,如:var el=$(“#mainNavigation”).find(“[style]”)、removeAttr('style');所有内容都在一行中,它似乎只返回包含样式标记的元素(现在已将其删除)…将查找和删除部分拆分为自己的行是我认为已修复的部分吗?find
将筛选与选择器匹配的元素。您可以使用end()
返回到前find
选择器状态。
$('#mainNavigation').children().removeAttr('style');