好的男生/女生。
下面是一些在Firefox中运行但没有IE的jQuery。我不知道为什么它会在一个而不是另一个中出现。
任何??
function SwapTextAssetforPOS() {
$("*").each(function () {
if ($(this).children().length == 0) {
$(this).text($(this).text().replace('Assets', 'POS'));
$(this).text($(this).text().replace('Asset', 'POS'));
$(this).text($(this).text().replace('assets', 'POS'));
$(this).text($(this).text().replace('asset', 'POS'));
}
});
}
对不起朋友 - 我得到的错误是: -
SCRIPT65535:意外调用方法或属性访问。 jquery-1.6.min.js,第16行60352
修改:------------------------------------------ ------------------------------------------
好的,所以更新 - 我删除了*选择器,IE不再爆炸,我现在的问题是我不知道如何让它在元素上进行替换。我有以下代码来ping对象中的所有文本元素:
function SwapTextAssetforPOS() {
var containerElementByID = $("#assetDetailContents");
containerElementByID.children().children().each(function () {
var $this = $(this);
alert($this.text());
});
这让我对每一段文字都发出警告,但有些文字包含在一张桌子里,有些是在一个范围内,有些是在那里。我无法控制大部分这些东西,所以我的新问题是如何使用这种类型的选择器使之前的替换工作。 - 我可以相信这是多么痛苦..
再次干杯
答案 0 :(得分:3)
我在IE浏览器中看到了问题。当你执行$("*").each
时......它会占用页面中的每个元素(包括标题,脚本等)。当你执行.text()
时,看起来IE中的某些元素失败了.text()没有意义。将“*”替换为“div”,例如它应该适用于div。
也许你可以做一些像if ($(this).text()) {$(this).text($(this).text().replace('Assets', 'POS'));}
这样的事情来确保为该元素定义text()。
尽管如此,通过整个DOM是有点过分的。你可以在可以包含文本的元素中添加一个类吗?比如class="replaceable"
,这样你就可以做$(".replaceable").text(...
答案 1 :(得分:1)
好的人 - 首先感谢你的帮助。
我通过拼凑一些建议并做了一些调查工作来解决这个问题。
简而言之,当IE遇到标签时,它正在走出去。我不是没有原因,但这是它每次都落空的地方。
function SwapTextAssetforPOS() {
var overlaycon = $("#jq-selectionHelper").find("*:not(img)"); //This line simply looks at the div surrounding the template and returns (to an array I believe) every element therein except for img tag
//as this breaks in IE when tying to do the replace text stuff below.
overlaycon.each(function () {
var $this = $(this);
if ($this.children().length == 0) {
$this.text($(this).text().replace('Assets', 'POS'));
$this.text($(this).text().replace('Asset', 'POS'));
$this.text($(this).text().replace('assets', 'POS'));
$this.text($(this).text().replace('asset', 'POS'));
}
});
}
此代码运行,我相信它比我原来的产品更有效。任何有关表现重新分解的进一步建议都是受欢迎的,但感谢上帝现在的工作。
再次感谢您的帮助。
此致
答案 2 :(得分:0)
此代码没有问题。我在IE和FF测试都工作正常
http://jsfiddle.net/wKWRC/
你应该使用F12开发者工具进行IE浏览,看看你得到了什么错误,其他人可以知道究竟是什么问题。您可以调试脚本并查看出错的位置。 IE对javascript错误很敏感,并且在调用此函数之前可能存在一些错误。
http://msdn.microsoft.com/en-us/library/gg699336%28v=vs.85%29.aspx
答案 3 :(得分:0)
只是预感但你可能在IE中耗尽内存。
首先,使用$('*')
永远不可取,最好使用$('p')
这样的选择器缩小范围。
此外,每次调用$(this)时都会创建一个新的jQuery对象,所以如果页面上有很多元素,那么每次都会生成9个对象。
惯例是在函数开头设置$this = $(this)
,这样你只能使用一个对象。
function SwapTextAssetforPOS() {
$("*").each(function () {
var $this = $(this);
if ($this.children().length == 0) {
$this.text($this.text().replace('Assets', 'POS'));
$this.text($this.text().replace('Asset', 'POS'));
$this.text($this.text().replace('assets', 'POS'));
$this.text($this.text().replace('asset', 'POS'));
}
});
}
答案 4 :(得分:0)
尝试这样
for (var i = 0, replacements = ['Assets','assets','asset','Asset']; i < 4; i++)
$("*:contains('" + replacements[i] +"')").map(function() { this.innerHTML = this.innerHTML.replace(/asset(s){0,1}/igm, 'POS'); })