Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从jquery中的所有子体中删除样式属性_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 从jquery中的所有子体中删除样式属性

Javascript 从jquery中的所有子体中删除样式属性,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我是javascript/jquery的新手,但到目前为止进展顺利(尽管您不想看到我的代码),但我在尝试从一些试图克隆的HTML中删除样式标记时遇到了麻烦 克隆的原因是,我被迫使用的CMS(我无法访问代码隐藏,只能在顶部添加代码)会自动生成顶部导航,我想在用户滚动后添加一个重复的粘性导航,但也会在滚动版本中添加一些元素 顶部导航的原始HTML看起来有点像: <nav id="mainNavigation" style="white-space: normal; display: block

我是javascript/jquery的新手,但到目前为止进展顺利(尽管您不想看到我的代码),但我在尝试从一些试图克隆的HTML中删除样式标记时遇到了麻烦

克隆的原因是,我被迫使用的CMS(我无法访问代码隐藏,只能在顶部添加代码)会自动生成顶部导航,我想在用户滚动后添加一个重复的粘性导航,但也会在滚动版本中添加一些元素

顶部导航的原始HTML看起来有点像:

<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');