jQuery.html()在使用cordova制作的android应用程序中无效

时间:2016-12-05 10:39:48

标签: javascript android jquery cordova google-chrome

解决方案

这不是真正的问题。问题是其中一个javascript没有加载。

我在这里问了一个关于它的新问题:Can't call functions from first included javascript file from the second included js file

我原来的问题

当我在浏览器中查看我的应用程序时(在使用Cordova构建/编译它之前),一切正常。但是在用Cordova构建它之后,$("#content").html("test");在android 4.2.2上不再起作用了。但是,它确实适用于Android 6.0.0。 alert("test");

首先我认为jQuery不起作用......但后来我尝试了这个:

$("body").click(function() {
    alert("test");
});

并且有效。

为什么.html()方法不起作用的任何想法?

更新

这是具有id" content"的元素的方式。看起来像:

<div id="content">
</div>

我尝试添加这样的内容:

$('#content').html(`<span>test1</span>`);

在所有Android版本中,我使用谷歌浏览器作为我的浏览器。

更新#2

我在

内外尝试了html()方法
$(document).ready(function(){});

2 个答案:

答案 0 :(得分:3)

开始于: 在您设置文字之前,请务必将<div id="content">加载到DOM。脚本执行,可以利用onload()来确保。可能检查了这一点,但是为其他人做准备。

接下来,我想知道问题是否与JQuery的.html()方法有关。文档说明&#34;此方法使用浏览器的innerHTML属性。&#34;

单独检查innerHTML()

document.getElementById("content").innerHTML = "test";

我知道在vanilla JS中使用innerHTML()时有一些限制,例如<script>的问题,所以如果JQuery&#39;} .html()使用它,可能会出现问题不知。

如果可以,请尝试使用vanilla JS通过以下方式设置#content <div>

document.getElementById("content").textContent = "test";

这样您就可以取消.html(),并且.innerHTML()无法使用.html()

编辑:这是JQuery的innerHTML()方法,真正的问题可能在于它如何处理设置。它尝试使用append(),如果以某种方式失败,则默认为function (value) { return access(this, function (value) { var elem = this[0] || {}, i = 0, l = this.length; if (value === undefined && elem.nodeType === 1) { return elem.innerHTML; } // See if we can take a shortcut and just use innerHTML if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) { value = value.replace(rxhtmlTag, "<$1></$2>"); try { for (; i < l; i++) { elem = this[i] || {}; // Remove element nodes and prevent memory leaks if (elem.nodeType === 1) { jQuery.cleanData(getAll(elem, false)); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch(e) {} } if (elem) { this.empty().append(value); } }, null, value, arguments.length); }

见下文:

append()

此外,如果innerHTML()方法中的html()失败,则以下是名为function () { return this.domManip(arguments, function (elem) { if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { var target = manipulationTarget(this, elem); target.appendChild(elem); } }); } 的后备默认值的来源:

html:

您可以通过Ctrl + F搜索JQuery中的方法,并在查看源代码时进行搜索...例如action.places,使用冒号。见下图:

JQuery Search for function/method in source

注意底部的搜索栏。

答案 1 :(得分:0)

我认为.html()无效的原因是因为它可能没有绑定到action /元素,而alert()本身就是一个消息框或向用户传达信息的方式。 让我们看看使用示例:

  1. 警报():

    $("body").click(function() {
        alert("test");
    });
    
  2. HTML():

    $("body").click(function(){
         $("h1").html("test");
      });
    
  3. 在这里,你可以清楚地看到,按钮触发了一个点击动作,然后改变了“h1”的内容,但警告并不需要任何这样的招标到一个元素左右.......

    希望这有用:)