Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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 setAttribute()正在将函数的文本设置为href值_Javascript_Jquery_Html - Fatal编程技术网

Javascript setAttribute()正在将函数的文本设置为href值

Javascript setAttribute()正在将函数的文本设置为href值,javascript,jquery,html,Javascript,Jquery,Html,这个标题可能没有任何意义,下面是发生的事情。我正在尝试运行一个onclick()函数,该函数将交换样式表以进行可视更改。我这样做的方式是replace()部分href值。具体来说,我正在将单词white更改为black,以便将href的值从styles black.css更改为styles-black.css 我这样做在jQuery中没有问题: $(".onoffswitch").click(function(){ if($('.onoffswitch-checkbox').is(':che

这个标题可能没有任何意义,下面是发生的事情。我正在尝试运行一个
onclick()
函数,该函数将交换样式表以进行可视更改。我这样做的方式是
replace()
部分
href
值。具体来说,我正在将单词white更改为black,以便将
href
的值从
styles black.css
更改为styles-black.css

我这样做在jQuery中没有问题:

$(".onoffswitch").click(function(){
  if($('.onoffswitch-checkbox').is(':checked') == false) {            
    $("#pagestyle").attr('href', function(i, blackCSS) {
        return blackCSS.replace('white', 'black');                
    });            
  } 
}))

我不是专家,所以这可能效率很低,但我仍在努力学习。 现在,当我尝试用vanilla JS复制它时,我得到了一些奇怪的结果。首先,这是我的代码:

document.getElementById("pagestyle").setAttribute("href", (function(i,blackCss) {
        return blackCSS.replace("white", "black");
    }))
运行它之后,我使用
document.getElementById('pagestyle').getAttribute('href')跟踪它
检查
href
的值,查看函数是否工作,以及…..这就是我得到的结果:

"function (i,blackCss) {
        return blackCSS.replace("white", "black");
    }"
以下是要素:

<link id="pagestyle" rel="stylesheet" type="text/css" href="function (i,blackCss) {&#10;            return blackCSS.replace(&quot;white&quot;, &quot;black&quot;);&#10;        }">
<link id="pagestyle" rel="stylesheet" type="text/css" href='css/styles-white.css'>   

很明显我做错了什么。奇怪的是,如果我不检查自己,我会认为它有效!风格改变了。如果我使用Chrome/IE工具检查元素,我可以看到styles-black.css的样式正在应用!但是为什么它要在元素的属性中显示函数呢?那不可能是对的,不是吗?当然,我对任何想向我展示它是如何完成的人都持开放态度

编辑 以下是元素的初始状态:

<link id="pagestyle" rel="stylesheet" type="text/css" href="function (i,blackCss) {&#10;            return blackCSS.replace(&quot;white&quot;, &quot;black&quot;);&#10;        }">
<link id="pagestyle" rel="stylesheet" type="text/css" href='css/styles-white.css'>   

您需要执行函数,并在末尾添加
()

document.getElementById("pagestyle").setAttribute("href", (function(blackCss) {
        return blackCSS.replace("white", "black");
    })(document.getElementById("pagestyle").href)) ;

您需要通过在末尾添加
()
来执行该函数

document.getElementById("pagestyle").setAttribute("href", (function(blackCss) {
        return blackCSS.replace("white", "black");
    })(document.getElementById("pagestyle").href)) ;

这是意料之中的,因为属性值只能是字符串,所以将函数转换为字符串

在vanilla js中,您可以这样做:

var el=document.getElementById(“页面样式”),
initial=el.getAttribute(“href”);
el.href=首字母替换(“白色”、“黑色”)

这是意料之中的,因为属性值只能是字符串,所以您的函数将转换为字符串

在vanilla js中,您可以这样做:

var el=document.getElementById(“页面样式”),
initial=el.getAttribute(“href”);
el.href=首字母替换(“白色”、“黑色”)

您。。。没有调用函数<代码>设置属性(“href”,(函数(i,blackCss){blah blah;})()您不能仅仅用基本的JavaScript方法替换复杂的jQuery方法,并期望它能够正常工作。您可能需要
pagestyle.href=pagestyle.href.replace(“白色”、“黑色”)或什么的。你。。。没有调用函数<代码>设置属性(“href”,(函数(i,blackCss){blah blah;})()您不能仅仅用基本的JavaScript方法替换复杂的jQuery方法,并期望它能够正常工作。您可能需要
pagestyle.href=pagestyle.href.replace(“白色”、“黑色”)
或其他。blackCSS将是未定义的blackCSS假设是
页面样式
的href值是的,这是未定义的,您指向此,我将修复它,感谢blackCSS将是未定义的blackCSS假设是
页面样式
的href值是的,这是未定义的,您指向此,我将修复它,谢谢