【问题标题】:How can i convert jQuery code to Javascript function [closed]我如何将 jQuery 代码转换为 Javascript 函数 [关闭]
【发布时间】:2013-07-19 06:17:34
【问题描述】:

在这个 jquery 代码中,我试图将 notes.php 文件加载到 div #inside1,它位于 div #panel 内。现在当我点击 div #flip 时,div #panel 应该切换。

我有 jquery 代码。 但我在java脚本中需要同样的功能 如何转换?

代码:

<script> 
$(document).ready(function(){
  $("#flip").click(function(){
    $("#panel").slideToggle("slow");
  });
   $("#inside1").load("notes.php");
});
</script>

【问题讨论】:

  • jQuery is JavaScript(; 把它变成纯 JavaScript(没有库)将是相当大的工作。只是因为幻灯片动画。给我一分钟。我会向你展示一个纯 JavaScript 转换这个。会很丑的。
  • 你的意思是你想在不使用jQuery的情况下重新实现这个脚本?然后查看您在此处使用的函数的 jQuery 源代码,并取出所需的部分以形成一个新脚本。 为什么你会这样做呢?
  • 好吧,这会产生一些很长的js代码,并且可能会出现跨浏览器不兼容......
  • @itachi 最明确。
  • 我记得我上大学时的 Ajax 课,没有 jQuery,乱七八糟,又胖又丑。现在添加动画管理,你最终会得到一大堆代码。如果您需要香草风格的代码check this out 或像 deceze 所说的 jquery 源代码。但是您可能想解释一下为什么需要这个,也许您的问题有不同的解决方案

标签: javascript jquery css


【解决方案1】:

警告:下面是丑陋的代码

var DOM = function (selector) {
    this.animate = function (prop, times, callbacks) {
        var el = document.querySelectorAll(selector);
        var animate = function (element, props, time, callback) {
            callback = callback || function () {};
            time = time || 1000;
            var timers = {}, // store the different interval timers so that they can be cancelled
            calls = 0, // numbers of times the call would have been called
                nprops = 0; // number of properties
            for (var prop in props) {
                (function (prop) {
                    var edit = prop == "scrollTop" ? element : element.style;
                    var stepCounter = [],
                        customStep = props[prop],
                        curr = edit[prop],
                        lastStepPercent = curr == "" ? (prop == "opacity" ? 1 : 0) : curr,
                        measure = prop == "scrollTop" || prop == "opacity" ? "" : "px",
                        stepper = function () {
                            edit[prop] = stepCounter[0] + measure;
                            stepCounter.shift();
                        };
                    if (props[prop].constructor == Number) customStep = [props[prop]];
                    for (var step = 0, len = customStep.length; step < len; step++) {
                        var from = parseInt(lastStepPercent),
                            to = parseInt(customStep[step]),
                            small = to < from,
                            numOfSteps = small ? from - to : to - from, // get current number of frames
                            multi = 30 * Math.round(parseInt(time) / 1000),
                            by = numOfSteps / (25 + multi) * len; // the stepper number

                        if (from == to) {
                            break;
                        }
                        for (var i = from; small ? i >= to : i <= to; i += small ? -by : by) {
                            stepCounter.push(i);
                        }
                        stepCounter.push(to);
                        lastStepPercent = customStep[step];
                    }
                    stepper();
                    timers[element + prop] = setInterval(function () {
                        stepper();
                        if (stepCounter.length == 0) {
                            clearInterval(timers[element + prop]);

                            calls++;
                            if (calls == nprops) {
                                callback.call(element);
                            }
                        }
                    }, time / stepCounter.length);
                    nprops++;
                })(prop);
            }
        };
        for (var i = 0; i < el.length; i++) {
            animate(el[i], prop, times, callbacks);
        };
        return new DOM(selector); // re-initiate "JavaScript class" for chaining
    }
};
var $ = function (selector) {
    return new DOM(selector);
};

window.onload = function () {
    document.getElementById("flip").onclick = function () {
        var panel = document.getElementById("panel");
        if (panel.style.height == 0) {
            $("#panel").animate({
                height: 100
            }, 2000); // thats kinda slow...
        } else {
            $("#panel").animate({
                height: 0
            }, 2000); // thats kinda slow...
        }
    };
    var request = window.XMLHttpRequest() ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

    request.open("POST", "notes.php", true);
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    request.onreadystatechange = function () {
        if (request.readyState == 4 && (request.status == 200 || request.status == 0 /*Fixes a FF bug*/ )) {
            document.getElementById("inside1").innerHTML = request.responseText;
        }
    }
    request.send();
};

我使用了我不久前创建的动画功能。请注意,这可能不起作用。这只是一个基本示例,说明您的代码在没有 jQuery 的情况下可以运行多长时间。它也可能不会完全按照您的 jQuery 代码所做的那样做。我不打算在这上面花一整夜,但我确实想向您展示我很快编写的代码。

它确实有效:http://jsfiddle.net/shawn31313/jm8ZR/1/

我在示例中删除了 AJAX 调用。但是动画功能可能会出现很多问题,所以请使用 jQuery。

【讨论】:

  • 你的代码让我想起了 jQuery 的用处。
  • @Subash 是的,jQuery 非常棒。
【解决方案2】:

文档准备好后开始

您可以将您的 $(document).ready() 放在页面底部,而不是使用 $(document).ready(),现在它将在加载之前的所有内容之后执行。

DOM 元素选择

选择DOM元素可以使用

 document.getElementById('someID');

点击事件

点击事件可以通过这个添加到一个div中

divTag.onclick = functionRef

滑动 div

在 div 中设置新内容可能最好只是更改 html 内容,而不是滑动,因为这将需要更多编码。

从 php 文件加载信息

jquery 中的 $.load() 函数是进行 ajax 调用的简写,看看这里你可以在 vanilla javascript 中进行 ajax 调用

http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first

希望这对您可以将代码重写为 vanilla javascript 有所帮助

【讨论】:

  • 首先,w3schools 总的来说是一个糟糕的资源。其次,您链接到的代码是......好吧......谁再使用IE6了?甚至 Google 都不支持 IE7,更不用说 IE6。
  • 根据他的要求,他可能希望或可能不希望实现对这些浏览器的支持,我认为关于它的使用的讨论超出了这个问题的范围。此外,在这种情况下,w3schools 的使用与任何在线代码查看器一样好
猜你喜欢
  • 2022-12-02
  • 1970-01-01
  • 2013-06-28
  • 2020-05-07
  • 2017-01-13
  • 1970-01-01
  • 2012-11-21
  • 2016-01-14
  • 2012-03-20
相关资源
最近更新 更多