문제

저는 그리스 몽키는 스크립트는 내가 반복의 무리를 통해 요소입니다.각 요소에 대한 필수 문자열 ID 를 사용할 수 있는을 참조하는 요소이다.요소의 자체 없 id 특성,그리고 나는 수정할 수 없 원본 문서를 제공 그것은 하나(지만 내가 만들 수 있습 DOM 에 변화가 스크립트).나는 저장할 수 없습니다 참조를 내기 때문에 스크립트가 필요할 때,그들은 그리스 몽키는 스크립트는 범위를 벗어납니다.는 몇 가지 방법이 있을 얻을에서"내"ID 는 브라우저를 사용하여 예를 들어,?Firefox-만 솔루션은 미;크로스 브라우저 솔루션에 적용할 수 있는 다른 시나리오에서 발생하는 것으로 나타났다

편집:

  • 으면 그리스 몽키는 스크립트는 범위를 벗는 방법은 당신이 참조하는 요소를 나중에? 그들은 그리스 몽키는 스크립트가 이벤트를 추가하 DOM 개체입니다.나는 저장할 수 없습니다 참조열에서 또는 다른 유사한 메커니즘이기 때문에 이벤트가 발생하는 배열은 사라질 것이기 때문에 그리스 몽키는 스크립트는 범위를 벗어납니다.그래서 이벤트의 필요는 어떤 방법을 알고 요소에 대한 참조는 스크립트라면 이벤트가 붙어 있습니다.고의 요소에 문을 연결되어 있습니다.

  • 할 수 있는지 당신은 단지 사용자 정의 속성에를 받으려면 어떻게 해야 합니까? 네,하지만 문제는 조회입니다.나는 리조트의 모든 요소를 반복 하나를 찾고 있는 사용자 정의 시설을 원하는 id 입니다.일하는 것이 확실하지만,큰 문서에서는 이 시간이 소요됩니다.나는 뭔가를 찾고 있는 브라우저 할 수 있는 조회 grunt work.

  • 기다릴 수 있거나 있을 수정하지주셔서 감사합니다. 나는 수정할 수 없 소스 문서를 만들 수 있 DOM 변화에서 스크립트입니다.난 명확하게 질문에.

  • 할 수 있을 사용하지 폐쇄? Closuses 지 않고 밖으로 작동하지만,저는 처음에 생각들이지 않을 것이다.내 나중에 게시합니다.

그것은 소리와 같은 질문에 대답:"거기에 몇 가지 내부 브라우저 ID 를 사용할 수 있는가?""No."

도움이 되었습니까?

해결책 4

업데이트: 감은 실제로 대답합니다.후 그렇게 만지작 그것은 몇 가지보다,나는 이유 마감 처음에 문제가고 그것을 해결하는 방법.까다로운 일감은 조심해야 할 때 반복을 통해 요소가 되지 않으로의 폐쇄를 참조하는 같은 요소입니다.예를 들어,이 작동하지 않:

for (var i = 0; i < elements.length; i++) {
    var element = elements[i];
    var button = document.createElement("button");
    button.addEventListener("click", function(ev) {
        // do something with element here
    }, false)
}

그러나 이것은:

var buildListener = function(element) {
    return function(ev) {
        // do something with event here
    };
};

for (var i = 0; i < elements.length; i++) {
    var element = elements[i];
    var button = document.createElement("button");
    button.addEventListener("click", buildListener(element), false)
}

어쨌든,하지 않기로 결정 중 하나를 선택하기 때문에 답변은 질문을 했는 두 가지 답변:1)기 내부의 Id 당신이 사용할 수 있습니다;2)사용해야 합니다 폐쇄합니다.그래서 나는 단순히회가 직접 참여 할 수있는 첫 번째 사람이 말하되었는지 여부를 내장 Id 또는 추천을 생성하 Id,플러스 사람을 언급된 폐쇄.도움을 주셔서 감사합니다!

다른 팁

대답은 없는 내부 id 당신은에 액세스 할 수 있습니다.오페라와 IE(어쩌면 사파리?) 지원 .sourceIndex (을 변경하는 경우 DOM 는 않습니다)하지만 파이어 폭스도의 이런 종류.

시뮬레이션할 수 있는 원본을 생성하여 인덱스 Xpath 지정된 노드를 찾는 인덱스의 노드에서 document.getElementsByTagName('*') 는 것이 항상 반환 요소에 원본다.

이 모든 필요한 완전한 정적 파일은 물론이다.변경 DOM 이 끊을 조회입니다.

내가 이해하지 못하는 것입할 수 있는 방법을 느슨한 참조하여 노드지만(이론)내부의 id?중 폐쇄 및 과제 작업 또는 그들은하지 않습니다.또는 나는 뭔가?

밈은 방법입니다.이 방법은 당신이해야 정확한 참조하는 요소도 살아남을 것입니다 일부는 셔플의하실 수 있습니다.

를 들어지 않는 사람들을 위해 알 마감:

var saved_element = findThatDOMNode();

document.body.onclick = function() 
{
   alert(saved_element); // it's still there!
}

는 경우 당신이 그것을 저장하는 쿠키에,나는 추천 컴퓨팅 XPath 그것을 위해(예를 들어을 걸어 DOM 계산 이전의 형제 자매를 찾을 때까지 요소로디와 당신은 결국 같은 뭔가 [@id=foo]/div[4]/p[2]/a).

XPointer 은 W3C 의 솔루션하는 문제입니다.

비트에 의하여 혼동의 표현하는 질문-당신이 말하는"당신이 필요 문자열 ID 는[너]을 참조하는 데 사용할 수 있는 요소를 나중에,"하지만 당신은"수 없습니다 상점에서 참조[h]스크립트를 할 때 때문에 당신은]그들이 필요는,그리스 몽키는 스크립트 자체가 범위를 벗어."

는 경우 스크립트가 있는 범위를 벗어,다음 당신은 어떻게 이를 참조하나요?!

나는 사실을 무시하는 난 혼동해서 무엇을 얻고 말하는 쓰리스 몽키 스크립트를 매우 자주 수정 DOM 요소에 액세스를 그들에게 ID 를 제공합니다.이 코드를 사용할 수 있습을 얻을 수상한 값을 위해 임시로 사용:

var PseudoGuid = new (function() {
    this.empty = "00000000-0000-0000-0000-000000000000";
    this.GetNew = function() {
        var fourChars = function() {
            return (((1 + Math.random()) * 0x10000)|0).toString(16).substring(1).toUpperCase();
        }
        return (fourChars() + fourChars() + "-" + fourChars() + "-" + fourChars() + "-" + fourChars() + "-" + fourChars() + fourChars() + fourChars());
    };
})();

// usage example:
var tempId = PseudoGuid.GetNew();
someDomElement.id = tempId;

는 작품을 위해,나는 그냥 그것을 테스트에서 그리스 몽키는 스크립트 myself.


업데이트: 클로저는 이동하는 방법-개인적으로,하드 코어 JavaScript 개발자,내가 알지 못하는 방법 당신 지 않았 사람들의 생각 immediately.:)

myDomElement; // some DOM element we want later reference to

someOtherDomElement.addEventListener("click", function(e) {
   // because of the closure, here we have a reference to myDomElement
   doSomething(myDomElement);
}, false);

지금 myDomElement 은 하나의 요소를 분명히,당신의 설명에서,이미 주위에 있기 때문에(당신이 생각을 했다 추가 ID,또는 어떤).

어쩌면 당신은 포스트의 예를 당신이 무엇을 하려고 하는 것이 쉽게 당신을 돕고 가정하면,이하지 않습니다.

는 경우 쓰 DOM(확신 할 수 있습니다).나이 다음과 같다:

는 기능을 반환 또는 생성 ID:

//(function () {

  var idCounter = new Date().getTime();
  function getId( node ) {
    return (node.id) ? node.id : (node.id = 'tempIdPrefix_' + idCounter++ );
  }

//})();

이를 사용하여 얻 ID 으로 필요하다:

var n = document.getElementById('someid');
getId(n);  // returns "someid"

var n = document.getElementsByTagName('div')[1];
getId(n);  // returns "tempIdPrefix_1224697942198"

이 방법은 필요가 없는 것에 대해 걱정할 필요가 없 HTML 때처럼 보이는 서버는 손습니다.

하지 않은 경우 수정하 DOM 당신은 그들 모두를 얻을 수 있습에 인덱스 순서는:

(Prototype 예제)

myNodes = document.body.descendants()
alert(document.body.descendants()[1].innerHTML)

할 수있는 루프를 통해 모든 노드 및 그들에게 독특한 className 할 수 있는 나중에 선택 쉽습니다.

당신은 설정할 수 있습니다 id 특성을 계산한 값입니다.수있는 기능에서 시제품 라이브러리는 이것을 할 수 있습니다.

http://www.prototypejs.org/api/element/identify

내가 좋아하는 자바스크립트 라이브러리입니다 jQuery.불행하게도 jQuery 없는 같은 기능을 식별할 수 있습니다.그러나,당신은 여전히 설정할 수 있습 id 특성 값으로 당신을 생성합니다.

http://docs.jquery.com/Attributes/attr#keyfn

여기에서 부분적인 조각에서 jQuery 문서를 설정하는 id div 위치를 기반으로 페이지:

  $(document).ready(function(){

    $("div").attr("id", function (arr) {
          return "div-id" + arr;
        });
  });

사용할 수도 있습니다 pguid(페이지-고유한 식별자)에 대한 독특한 식별자를 세대:

 pguid = b9j.pguid.next() // A unique id (suitable for a DOM element)
                          // is generated
                          // Something like "b9j-pguid-20a9ff-0"
 ...
 pguid = b9j.pguid.next() // Another unique one... "b9j-pguid-20a9ff-1"

 // Build a custom generator
 var sequence = new b9j.pguid.Sequence({ namespace: "frobozz" })
 pguid = sequence.next() "frobozz-c861e1-0"

http://appengine.bravo9.com/b9j/documentation/pguid.html

마우스를 사용 및/또는 위치의 속성 요소를 생성하기 위해 고유 ID 입니다.

생성할 수 있습니다 안정적이,독특한 식별자는 모든 노드에 DOM 다음과 같은 기능:

function getUniqueKeyForNode (targetNode) {
    const pieces = ['doc'];
    let node = targetNode;

    while (node && node.parentNode) {
        pieces.push(Array.prototype.indexOf.call(node.parentNode.childNodes, node));
        node = node.parentNode
    }

    return pieces.reverse().join('/');
}

이와 같은 식별자 doc/0, doc/0/0, doc/0/1, doc/0/1/0, doc/0/1/1 에 대한 구조는 다음과 같이 하나:

<div>
    <div />
    <div>
        <div />
        <div />
    </div>
</div>

거기에는 또한 몇 가지 최적화 및 변경할 수 있는,예를 들어:

  • while 루프 break 할 때는 node 는 특성이 알고 있는 독특한 예를 들어, @id

  • reverse()pieces, 현재 그것은 거기에 더 많은처럼 보이기 DOM 구조 ID 의에서 생성됩

  • 을 포함하지 않는 첫 번째 piece doc 지 않는 경우에 필요한 식별자에 대한 문서 노드

  • 저장에 대한 식별자는 노드에는 어떤 방법과 재사용하는 가치에 대한 아동 노드하는 것을 피하기 위해 통과 모든 방법을 다시 나무.

  • 을 작성하는 경우 이러한 식별자는 다시 XML 을 사용하여 다른 연결 문자는 경우 특성 당신이 쓰이 제한됩니다.

자바스크립트에서 당신은 첨부할 수 있는 사용자 정의 필드 노드

if(node.id) {
  node.myId = node.id;
} else {
  node.myId = createId();
}

// store myId

그것의 비트는 해킹이지만,그것은 것을 각 노드 id 를 사용할 수 있습니다.물론, document.getElementById() 지불하지 않습니다.

I'생각'나는 단지 문제를 해결과 유사합니다.그러나 나는 jQuery 를 사용하는 브라우저에서 DOM 환경입니다.

var objA=$("선택을 일부 dom 소");var objB=$("선택하여 다른 돔소");

는 경우(objA[0]===objB[0]){ //다!두 개체는 지점을 정확히 같은 노드 dom }

OK,ID 가 없는 관련 DOM 요소가 자동으로 합니다.DOM 는 hierarchycal 의 구조 요소는 정보입니다.이러한 관점에서,당신 연결 데이터를 요소 DOM jQuery 또는 jQLite.그것을 해결할 수 있는 경우 몇 가지 문제가 있 바인딩하는 사용자 정의 데이터를 요소입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top