2014-04-11 5 views
0

내 커서가있는 부모 요소의 특성을 가져오고 싶습니다.왜 내가 정의되지 않은 상태로 돌아 왔습니까?

저는 지금 약 2 시간 동안 완전히 실패했습니다. 그래서 아무도 제안 사항이 있는지 확인하기 위해 게시하고 있습니다. 이것은 내가 가지고 있지만 parentID는 undefined를 반환 이유를 알고하지 않는 기능입니다 :

function getAttrOfParent() { 
    var newRange = rangy.getSelection().getRangeAt(0); 
    var parentElement = newRange.commonAncestorContainer; 
    var parentID = $(parentElement).attr('id'); 
    alert(parentID); 
} 

이 부모 요소의 텍스트를 얻기 위해 잘 작동 ...

function getTextOfParent() { 
    var newRange = rangy.getSelection().getRangeAt(0); 
    var parentElement = newRange.commonAncestorContainer; 
    var parentText = $(parentElement).text(); 
    alert(parentText); 
} 

...이 지정된 요소의 제목을 얻기 위해 잘 작동합니다.

function getAttrOfElement() { 
    var parentID = $('#1').attr('id'); 
    alert(parentID); 
} 

Here's my jsFiddle, 당신은 작동하는 최초의 두 가지 기능을위한 텍스트 영역의 내부를 클릭합니다.

+0

var parentElement = $(newRange.commonAncestorContainer).parents('span'); 뭔가를 시도 할 수 있습니다. 후자가 잘 작동합니다. 하지만 어쩌면 당신이 원하는 것을 정확히 이해하지 못할 수도 있습니다. 거기에는'id' 나'title' 속성을 갖지 않는 두 개의'p' 요소가 있습니다. 물론'undefined '가됩니다. –

+0

첫 번째 함수가 험난한 오류로 인해 충돌합니다. '잡히지 않은 DOM 예외 : INDEX_SIZE_ERR' – David

+0

@Felix Kling 피들을 수정했지만'.attr ('id ')'는 여전히 작동하지 않습니다. –

답변

1

parentElement = newRange.commonAncestorContainer은 부모 요소를 제공하지 않으므로 부모에게 노드을 제공합니다.

console.log(parentElement)이 무엇인지 선택하는 것이 매우 분명합니다.

범위 중 하나에서 텍스트를 완전히 선택하면 텍스트 노드 (ID가 없음)가 표시됩니다.

텍스트를 더 선택하면 단락 요소 노드 (ID가없는 노드)가 표시됩니다.

당신은, 당신이 '('제목 ')``대신 .attr`의 ('아이디 ') .attr를 사용하여 바이올린에

+0

완벽하게 작동합니다! P.S. 저는 자바 스크립트에 익숙하지 않고 팁을 주셔서 감사합니다. –

관련 문제