寻求优化使用parentNode和nextElementSibling

时间:2019-06-03 23:20:49

标签: javascript dom onclick event-handling

在此编码练习中,tt花了我一些时间来弄清楚如何引用隐藏在此处的类,现在它可以正常工作了,打破它是可耻的,但是,我希望将其重构东西,所以对需要隐藏的类的引用更干净。

如您所见,在对每种自适应重用的解决方案进行硬编码时,将nextElementSibling加倍以遍历树的成本。我的希望是简单地更改所查询的类。为此,起初看起来像使用this.querySelector('* +')可能是答案,但是经过多次尝试(也许不是正确的b / c,除非您另外告诉我,它仍然可能起作用),但失败了。

以下方法有效:

public void SnapToGrid()
{

    Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

    Vector2 masterObjectPos = new Vector2(dataManagement.masterObject.transform.position.x, dataManagement.masterObject.transform.position.y);

    Vector2 mouseToMasterObjectPos = masterObjectPos - mousePosition;

    float mouseMasterObjectDistance = Vector2.Distance(masterObjectPos, mousePosition);

    Vector2 camPos = new Vector2(Camera.main.transform.position.x, Camera.main.transform.position.y);

    mousePosition -= masterObjectPos;

    Debug.LogWarning("MOUSEPtomasterpos: " + mouseToMasterObjectPos);
    Debug.LogWarning("mouseobject distance " + mouseMasterObjectDistance);

    int xCount = Mathf.RoundToInt(mousePosition.x / gridSizeX);
    int yCount = Mathf.RoundToInt(mousePosition.y / gridSizeY);

    Vector2 result = new Vector2((float)xCount * gridSizeX, (float)yCount * gridSizeY);

   result += masterObjectPos;

    result += mouseToMasterObjectPos;

    template.transform.position = result;
}

那么,如何根据给出的HTML轮廓以更简单的方式引用.acc-body类?

而且,由于此处实施的事件处理方法绝对是非标准的,因此可能不建议这样做,是否足以避免在生产中使用此方法?

        let el = this.parentNode.firstChild
        el = el.nextElementSibling
        el = el.nextElementSibling

作为IIFE实施;建议将其放在自己的.js文件中,并从HTML文档中的脚本标签引用。

<div class="acc">
        <div class="acc-item">
            <!-- <div class="acc-title"> -->
            <h1 class="acc-title" id="btn_hide">Click to hide the Body</h1>

            <!-- </div> -->
            <div class="acc-body hideable">
                <p id="head1">Why innerHTML is so great...</p>
            </div>   
        </div> 
        <div class="acc-item"> 
            <h1 class="acc-title" id="other_btn_hide_xxxx">Click to hide the Body</h1>

            <div class="acc-body hideable">
                <p id="head2">Why innerHTML is so great...</p>
            </div>
        </div>
    </div>

0 个答案:

没有答案