0

今、私はそれを次のようにやっています:

NodeList* elementsUsingTagG = [third_floor.DOMDocument getElementsByTagName:@"g"];
auds = [elementsUsingTagG.internalArray objectAtIndex:1];
SVGElement *elem = (SVGElement*)[third_floor.DOMDocument getElementById:hitLayer.name];
if ([auds.childNodes.internalArray containsObject:elem])
{
    [self deselectTappedLayer];
    lastTappedLayer = hitLayer;

    if (lastTappedLayer != nil)
    {
        lastTappedLayer.opacity = 1.0f;
        NSLog(@"Clicked on auditory %@, highlight it!", hitLayer.name);
    }
}

この要素が属するグループを識別するSVGElement/CALayer / Nodeのプロパティを取得できますか?ありがとう

4

1 に答える 1

1

このようなものだと思います。コードはテストしていませんが、お役に立てば幸いです。

反復バージョン:

- (Element *)findFirstParentElementFromNode:(Node *)node
                                withTagName:(NSString *)tagName {
    for (node = node.parentNode; node != nil; node = node.parentNode) {
        if (![node isKindOfClass:[Element class]]) {
            continue;
        }

        Element *element = (Element *)node;
        if([element.tagName isEqualToString:tagName]) {
            return element;
        }
    }

    return nil;
}

再帰バージョン:

- (Element *)findFirstParentElementFromNode:(Node *)node
                                withTagName:(NSString *)tagName {
    if (node.parentNode == nil) {
        return nil;
    }

    if ([node.parentNode isKindOfClass:[Element class]]) {
        Element *element = (Element *)node.parentNode;
        if([element.tagName isEqualToString:tagName]) {
            return element;
        }
    }

    return [self findFirstParentElementFrom:node.parentNode
                                withTagName:tagName];
}

そして、あなたの場合、このようにそれらの1つを使用してください:

Element *groupElement = [self findFirstParentElementFromNode:elem
                                                 withTagName:@"g"];
于 2013-03-17T19:19:56.697 に答える