2015-03-08 73 views
0

如何使用jQ将参数传递到外部jScript?将参数传递到外部js脚本的最佳方法

我能得到这个工作的罚款:

<script 
    id = 'myScript' 
    data-myParm =' my value' 
    src = './myScript.js' > 
</script> 

myScript.js:

document.getElementById('myScript').getAttribute('data-myParm') 

但我想我看到了一个非常简单的(更好)的方式来做到这一点使用jQuery ,而不是使用脚本ID。此外,我宁愿不使用任何类似

<script src='./myScript.js?myParm=my%value&'> </script> 

我想是这样。数据$(“myParm”)和$(“脚本”)。没有成功的数据(“myParm”)。

意见建议?

+0

'很容易的(更好的)方式,使用jQuery'做......。 – JFK 2015-03-08 19:18:30

+0

也许jQuery不一定“更好”,但它更有趣。 – edwardsmarkf 2015-03-08 20:47:42

回答

1

如果您的脚本正在同步加载,那么每个脚本将是最初运行时DOM中的最后一个脚本。

所以,你应该能够做到这一点:

var param = $('script').last().data('myparm'); 

或等价:

var scripts = document.getElementsByTagName('script'); 
var param = scripts[scripts.length - 1].getAttribute('data-myparm'); 

请注意,你可以这样做以外的任何文件准备好处理程序或任何会后执行的该脚本最初加载。

编辑:HTML5 specdata-*属性应全部用小写来处理,它看起来像jQuery的,如果提供的字符串全部小写.data(...)只会工作,所以我建议使用所有小写整个data-*属性。

+0

$('script')。last()。data('myparm')工作并且谢谢 - 我不确定为什么需要小写。也许数据冲刺需要它? – edwardsmarkf 2015-03-08 21:25:35

+0

@edwardsmarkf是的,看起来像HTML5规范说'data- *'属性应该被视为小写([link](http://www.w3.org/html/wg/drafts/html/master/dom)。 html#embedding-custom-non-visible-data-with-the-data - * - attributes)),所以你最好在你的HTML和JS中使用全部小写。顺便说一句,你接受的答案是我的一个明显的副本(你可以检查时间戳和编辑历史,如果你怀疑这一点)。如果这确实回答你的问题,你能接受我的吗? – JLRishe 2015-03-09 00:46:56

+0

对不起 - 以为我确实接受你的答案。你的答案确实是第一次。但无论哪种方式,让它工作非常令人兴奋。并再次感谢你帮助我。出于某种原因,我的问题本身被拒绝了,尽管我的确研究了这个问题很多,而且我认为这个问题是非常相关的,因为考虑到很少有

1

使用jQuery不一定比使用JavaScript的香草 “更好” 的尝试

var data = $("script").filter(function(i, el) { 
 
    return !!$(el).data().myparm 
 
}).data().myparm || void 0; 
 

 
console.log(data)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<script 
 
    id = 'myScript' 
 
    data-myParm =' my value' 
 
    src = '' > 
 
</script>

+0

})。data()。myparm || void 0; - - - Uncaught TypeError:无法读取未定义的属性'myparm' – edwardsmarkf 2015-03-08 21:33:56

+0

@edwardsmarkf http://jsfiddle.net/yk4tzxt6/1/ – guest271314 2015-03-08 21:42:13